2017-02-28 3 views
1

Ich versuche, eine Zeichenfolge Zeitstempel in etwa wie folgt zu konvertieren:Wie ändere ich den String-Zeitstempel in ein für Menschen lesbares Datumsformat?

2 Min. Vor. 1 Stunde her. vor 4 Tagen. vor 3 Wochen. vor 5 Monaten. vor 1 Jahr.

Ich benutze Javas DateUtils.getRelativeTimeSpanString() Methode zu konvertieren, aber es zeigt Datum wie 1. September 2016. Ich will es als 6 Monaten zu zeigen. Hier

ist der Code:

long now = System.currentTimeMillis(); 
System.err.println(); 

DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.ENGLISH); 
Date startDate; 

try { 
    startDate = df.parse(userLogs.get(i).getDate()); 
    String sds = (String) DateUtils.getRelativeTimeSpanString(startDate.getTime(),System.currentTimeMillis(),DateUtils.MINUTE_IN_MILLIS); 
    System.err.println(sds); 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 

Update: Ich will nicht Joda Zeit oder eine andere Bibliothek verwenden, warum es als Duplikat markiert verstehe ich nicht!

+0

Betrachten JodaTime mit [siehe diese vorherige Antwort] (https: // stackoverflow.com/questions/2179644/how-to-calculate-elapsed-time-from-now-with-joda-time) –

+0

ist 'startDate' in Zukunft? (nicht vorbei) – Yazan

+0

@Yazan denke auf diese Weise, sehen Sie die Zeit neben Ihrem Kommentar wird es vor 44 Sek. jetzt zeigen und später wird es zu etwas ändern, ich möchte genau so – Praneeth

Antwort

1

Bitte versuchen Sie diese Klasse

long time = Long.valueOf(getDateFromDateTime("2016-09-01 15:57:20"));//2016-09-01 15:57:20 pass your date here 

    String timeStr = TimeUtility.timeAgo(time/1000); 

Ausgabe zu verwenden: vor einer Minute

public long getDateFromDateTime(String date) { 
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", 
      Locale.US); 
    Date new_date; 
    long t = 0L; 
    try { 
     new_date = df.parse(date); 
     t = new_date.getTime(); 
     return t; 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return 0; 
} 


public class TimeUtility { 

public static String timeAgo(long time_ago) { 
    long cur_time = (Calendar.getInstance().getTimeInMillis())/1000; 
    long time_elapsed = cur_time - time_ago; 
    long seconds = time_elapsed; 
    int minutes = Math.round(time_elapsed/60); 
    int hours = Math.round(time_elapsed/3600); 
    int days = Math.round(time_elapsed/86400); 
    int weeks = Math.round(time_elapsed/604800); 
    int months = Math.round(time_elapsed/2600640); 
    int years = Math.round(time_elapsed/31207680); 

    // Seconds 
    if (seconds <= 60) { 
     return "just now"; 
    } 
    //Minutes 
    else if (minutes <= 60) { 
     if (minutes == 1) { 
      return "one minute ago"; 
     } else { 
      return minutes + " minutes ago"; 
     } 
    } 
    //Hours 
    else if (hours <= 24) { 
     if (hours == 1) { 
      return "an hour ago"; 
     } else { 
      return hours + " hrs ago"; 
     } 
    } 
    //Days 
    else if (days <= 7) { 
     if (days == 1) { 
      return "yesterday"; 
     } else { 
      return days + " days ago"; 
     } 
    } 
    //Weeks 
    else if (weeks <= 4.3) { 
     if (weeks == 1) { 
      return "a week ago"; 
     } else { 
      return weeks + " weeks ago"; 
     } 
    } 
    //Months 
    else if (months <= 12) { 
     if (months == 1) { 
      return "a month ago"; 
     } else { 
      return months + " months ago"; 
     } 
    } 
    //Years 
    else { 
     if (years == 1) { 
      return "one year ago"; 
     } else { 
      return years + " years ago"; 
     } 
    } 
} 

}

+0

Es gibt gerade jedes Mal wieder – Praneeth

+0

@praneethkumar Können Sie teilen Sie alte Zeitstempel mit mir? damit ich es testen kann. Ich bin sicher, dass Sie keinen gültigen Zeitstempel verwenden, weshalb Sie diesen erhalten. –

+0

@praneethkumar Sie bitte diese Seite benutzen, um Ihre Zeitstempel zu bestätigen https://www.epochconverter.com/ –

Verwandte Themen