2017-02-28 10 views
1

我試圖將字符串時間戳轉換爲如下所示:如何將字符串時間戳更改爲人類可讀的日期格式?

2分鐘前。 1小時前。 4天前。 3周前。 5個月前。 1年前。

我使用Java的DateUtils.getRelativeTimeSpanString()方法進行轉換,但它顯示的日期類似於2016年1月1日。我希望它顯示爲6個月前。

下面是代碼:

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(); 
} 

更新:我不想使用喬達時間或爲什麼它被標記爲重複我不明白,任何其他庫!

+0

考慮使用JodaTime,[見這以前的答案](https://開頭stackoverflow.com/questions/2179644/how-to-calculate-elapsed-time-from-now-with-joda-time) –

+0

將來是'startDate'嗎? (不是過去) – Yazan

+0

@Yazan想到這種方式,看看你的評論旁邊的時間,它會顯示44秒前現在和後來它會改變一些東西,我想這正是 – Praneeth

回答

1

請儘量使用這個類

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); 

輸出:一分鐘前

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

現在每次都回來 – Praneeth

+0

@praneethkumar你能和我分享你的舊時間嗎?所以我可以測試它。我相信你沒有使用有效的時間戳這就是爲什麼你得到這個。 –

+0

@praneethkumar請使用此網站確認您的時間戳https://www.epochconverter.com/ –

相關問題