2014-09-12 21 views
19

我有一個日期字段(lastUpdated)。我想將此日期翻譯爲人類可讀的格式,例如'today','1 days ago','2 days ago',...使用Android在Android中將相對日期格式化爲人類可讀格式DateUtils API

我正在使用android.text.format.DateUtils Android庫中包含的API。

這裏是我的嘗試:

DateUtils.getRelativeDateTimeString(context, 
        lastUpdated.getTime(), 
        DateUtils.DAY_IN_MILLIS, 
        DateUtils.WEEK_IN_MILLIS, 
        DateUtils.FORMAT_SHOW_YEAR); 

這裏是輸出:

0 day ago, 12:00am 
yesterday, 9:30am 
2 days ago, 1:30pm 
Sep 4, 12:30pm 

結果我的預期:(無時間信息)

0 day ago --------- This should be 'today' 
yesterday 
2 days ago 
Sep 4 

請注意,如果我從lastUpdated清除時間。它將顯示'12:00am'作爲時間信息。

任何人有什麼想法?有什麼辦法可以消除輸出時間嗎?

謝謝!

回答

49

您可以使用DateUtils.getRelativeTimeSpanString爲:

long now = System.currentTimeMillis(); 
DateUtils.getRelativeTimeSpanString(lastUpdated.getTime(), now, DateUtils.DAY_IN_MILLIS); 
+2

我使用它,它適用於API 18+,但API 16和17它顯示「在0天」和「明天」(小寫),而不是Android模擬器上的「今日」和「明天」。有人知道爲什麼? – levavare 2017-02-02 16:20:25

+0

很棒............ – 2017-07-18 05:15:24

1

看起來好像你想爲最近的時間有一個自定義處理程序,而對於更遠的日期來說,它更適合於某些東西。像這樣的工作:

public String getTimeDiff(long secondsTimeDiff) 
{  
    long secondsInOneDay = 84600; 
    int maxDaysAgo = 10; 

    if (secondsTimeDiff < secondsInOneDay) 
    { 
     return "today"; 
    } 
    else if (secondsTimeDiff < 2*secondsInOneDay) 
    { 
     return "yesterday"; 
    } 
    else if (secondsTimeDiff < maxDaysAgo*secondsInOneDay) 
    { 
     int days = (int) (secondsTimeDiff/secondsInOneDay); 
     return days + " days ago"; 
    } 
    else 
    { 
     //use normal DateUtils logic here... 
     return "...."; 
    } 
} 
+3

這種解決方案的大型容易出錯,不支持國際化。我強烈建議使用DateUtils類。 – JakeWilson801 2016-07-21 03:02:19