2011-05-30 284 views
12

我需要計算兩個日期之間經過的時間。java計算兩個時間戳之間的時間

這裏的問題在於,我需要將它顯示爲YouTube的視頻評論時間戳。也就是說,要用最大的尺度來展示它。

例如,

  • 如果時間爲50秒前,應該說50秒前。
  • 如果時間超過一分鐘,應該說一分鐘前/十分鐘前等。
  • 如果時差爲1小時30分鐘,則應顯示:一小時前。
  • 如果時間比一週前應該說的一週半。
  • 如果時間超過一個月,應該說一個月前/兩個月前等...
  • 等等等等..

那麼,什麼是處理的最佳方式這個? 我應該用case還是if聲明來返回類似這樣的語句?還是有更好的方法(也許是一個圖書館已經做了這樣的事情)?

回答

35

使用DateUtils.getRelativeTimeSpanString(long time, long now, long minResolution)time是開始時間,now是結束時間(以毫秒爲單位)。要在「秒前」報告,請將minResolution設置爲零。

例子:

String result = DateUtils.getRelativeTimeSpanString(1306767830, 1306767835, 0); 
// result = "5 seconds ago" 
+2

這完美謝謝。 – DArkO 2011-05-30 19:13:18

+3

完美的答案,但返回類型是** CharSequence **,而不是** String **。因此,要麼將**結果**類型更改爲** CharSequence **,要麼對其進行類型轉換。 – Touhid 2014-10-03 08:37:36

+0

我如何獲得兩個時間戳之間的天數? – 2017-11-03 11:46:08

4
date1.getTime() - date2.getTime() 

這將返回兩個日期之間以毫秒爲單位的時間。只需將其轉換爲您想要顯示的內容(例如小時分秒)

+0

好吧,我知道該怎麼做......這讓我在毫秒級的時間,而不是在我想創建它的格式...我的問題是關於如何繼續得到我的問題中描述的結果。什麼是正確/最簡單的方法來做到這一點... – DArkO 2011-05-30 15:01:49

2

看一看PrettyTime

此外,每次你想在Java中做一些與日期/時間有關的事情時,你應該看看Joda Time。現在就做,你以後會感謝我。

-1

看起來就像你有一組自定義規則和算法來選擇一個規則是基於兩個時間戳之間的秒數。最簡單的方法是處理規則在一系列if/else if語句:

private String getTimeAsString(int seconds) { 
    if (seconds < 60) {  // rule 1 
     return String.format("%s seconds ago", seconds); 
    } else if (seconds < 3600) { // rule 2 
     return String.format("%s minutes ago", seconds/60); 
    } // ... and so on 
} 
0

您的需要是非常具體的,我不知道這將解決這個問題爲你出任何LIB盒子。 然而,問題並不十分複雜,一個充滿「ifs」的小函數應該可以做到這一點。 當然,像Joda Time這樣不錯的日期庫會幫助你保持代碼清潔。誰想要使用GregorianCalendar!?