2013-09-04 3 views
9

bekommen habe ich diesen Code in meinem PHPZeitdifferenz mit String wie „Vor einer Minute“ oder „Vor einer Stunde“ auf Android

function nicetime($date) 
{ 
date_default_timezone_set("Asia/Taipei"); 
if(empty($date)) { 
    return "No date provided"; 
} 

$periods   = array("second", "minute", "hour", "day", "week", "month", "year", "decade"); 
$lengths   = array("60","60","24","7","4.35","12","10"); 

$now    = time(); 
$unix_date   = strtotime($date); 

    // check validity of date 
if(empty($unix_date)) {  
    return "Bad date"; 
} 

// is it future date or past date 
if($now > $unix_date) {  
    $difference  = $now - $unix_date; 
    $tense   = "ago"; 

} else { 
    $difference  = $unix_date - $now; 
    $tense   = "from now"; 
} 

for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) { 
    $difference /= $lengths[$j]; 
} 

$difference = round($difference); 

if($difference != 1) { 
    $periods[$j].= "s"; 
} 

return "$difference $periods[$j] {$tense}"; 
} 

aber jetzt mag ich das gleiche tun, aber dieses Mal in meinem Android . Ich habe Probleme, weil die Zeichenfolge mytime aus einer Datenbank in einem SQL-Format ist.

String mytime = pref.getString("announcementtime" + count, null); 

Ausgabe von mytime:

2013-08-31 15:55:22 

ich möchte es konvertieren:

23 minutes ago //something like this 

Bitte beachten Sie die Standard-Zeitzone und die Datetime = Jetzt

Antwort

25

Es ist alles in der DateUtils Klasse.

CharSequence getRelativeTimeSpanString (long time, long now, long minResolution); 

gibt Ihnen den Unterschied zwischen der Zeit und jetzt in einem Format wie:

54 Sekunden.

Um die Datumszeichenfolge Sie es in empoch Zeit zuerst konvertieren zu verwenden:

String mytime = pref.getString("announcementtime" + count, null); 

// it comes out like this 2013-08-31 15:55:22 so adjust the date format 
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
Date date = df.parse(str); 
long epoch = date.getTime(); 

String timePassedString = getRelativeTimeSpanString (epoch, System.currentTimeMillis(), DateUtils.SECOND_IN_MILLIS); 
+0

hi, ich bekomme es immer noch nicht, benutze meine Zeichenkette String mytime = pref.getString ("announcetime" + count, null); wie kann ich das tun? –

+0

Ich machte eine Bearbeitung der Antwort, die es erklären sollte – pumpkee

+0

Ich habe immer noch ein Problem mit diesem, aber ich kann es von hier aus verwalten, danke –

4

Sie können die Eingangsvariablen „timeAtMiliseconds“ ändern, für mein Beispiel im Format von Datum bei miliseconds war war.

public static String parseDate(String timeAtMiliseconds) { 
    if (timeAtMiliseconds.equalsIgnoreCase("")) { 
     return ""; 
    } 
    //API.log("Day Ago "+dayago); 
    String result = "now"; 
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    String todayDate = formatter.format(new Date()); 
    Calendar calendar = Calendar.getInstance(); 

    long dayagolong = Long.valueOf(timeAtMiliseconds) * 1000; 
    calendar.setTimeInMillis(dayagolong); 
    String agoformater = formatter.format(calendar.getTime()); 

    Date CurrentDate = null; 
    Date CreateDate = null; 

    try { 
     CurrentDate = formatter.parse(todayDate); 
     CreateDate = formatter.parse(agoformater); 

     long different = Math.abs(CurrentDate.getTime() - CreateDate.getTime()); 

     long secondsInMilli = 1000; 
     long minutesInMilli = secondsInMilli * 60; 
     long hoursInMilli = minutesInMilli * 60; 
     long daysInMilli = hoursInMilli * 24; 

     long elapsedDays = different/daysInMilli; 
     different = different % daysInMilli; 

     long elapsedHours = different/hoursInMilli; 
     different = different % hoursInMilli; 

     long elapsedMinutes = different/minutesInMilli; 
     different = different % minutesInMilli; 

     long elapsedSeconds = different/secondsInMilli; 

     different = different % secondsInMilli; 
     if (elapsedDays == 0) { 
      if (elapsedHours == 0) { 
       if (elapsedMinutes == 0) { 
        if (elapsedSeconds < 0) { 
         return "0" + " s"; 
        } else { 
         if (elapsedDays > 0 && elapsedSeconds < 59) { 
          return "now"; 
         } 
        } 
       } else { 
        return String.valueOf(elapsedMinutes) + "m ago"; 
       } 
      } else { 
       return String.valueOf(elapsedHours) + "h ago"; 
      } 

     } else { 
      if (elapsedDays <= 29) { 
       return String.valueOf(elapsedDays) + "d ago"; 
      } 
      if (elapsedDays > 29 && elapsedDays <= 58) { 
       return "1Mth ago"; 
      } 
      if (elapsedDays > 58 && elapsedDays <= 87) { 
       return "2Mth ago"; 
      } 
      if (elapsedDays > 87 && elapsedDays <= 116) { 
       return "3Mth ago"; 
      } 
      if (elapsedDays > 116 && elapsedDays <= 145) { 
       return "4Mth ago"; 
      } 
      if (elapsedDays > 145 && elapsedDays <= 174) { 
       return "5Mth ago"; 
      } 
      if (elapsedDays > 174 && elapsedDays <= 203) { 
       return "6Mth ago"; 
      } 
      if (elapsedDays > 203 && elapsedDays <= 232) { 
       return "7Mth ago"; 
      } 
      if (elapsedDays > 232 && elapsedDays <= 261) { 
       return "8Mth ago"; 
      } 
      if (elapsedDays > 261 && elapsedDays <= 290) { 
       return "9Mth ago"; 
      } 
      if (elapsedDays > 290 && elapsedDays <= 319) { 
       return "10Mth ago"; 
      } 
      if (elapsedDays > 319 && elapsedDays <= 348) { 
       return "11Mth ago"; 
      } 
      if (elapsedDays > 348 && elapsedDays <= 360) { 
       return "12Mth ago"; 
      } 

      if (elapsedDays > 360 && elapsedDays <= 720) { 
       return "1 year ago"; 
      } 

      if (elapsedDays > 720) { 
       SimpleDateFormat formatterYear = new SimpleDateFormat("MM/dd/yyyy"); 
       Calendar calendarYear = Calendar.getInstance(); 
       calendarYear.setTimeInMillis(dayagolong); 
       return formatterYear.format(calendarYear.getTime()) + ""; 
      } 

     } 

    } catch (java.text.ParseException e) { 
     e.printStackTrace(); 
    } 
    return result; 
} 
+0

Gent, deine Antwort hat mir in einem meiner Projekte geholfen. Du bist wirklich ein großartiger Programmierer und das ist eine der besten Antworten, die ich in meinem ganzen Leben gelesen habe. Mach weiter so! Ich hoffe, Sie eines Tages auf einer Konferenz zu sehen! – Granit

Verwandte Themen