web-dev-qa-db-ja.com

Android using Android DateUtils APIを使用して、人間が読める形式に相対日付をフォーマットします

日付フィールドがあります(lastUpdated)。この日付を「今日」、「1日前」、「2日前」などの人間が読める形式に変換したい...

Androidライブラリに含まれている Android.text.format.DateUtils 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:00 am」と表示されます。

誰かがアイデアを持っていますか?出力から時間を削除する方法はありますか?

ありがとうございました!

30
Loc

そのために DateUtils.getRelativeTimeSpanString を使用できます。

long now = System.currentTimeMillis();
DateUtils.getRelativeTimeSpanString(lastUpdated.getTime(), now, DateUtils.DAY_IN_MILLIS);
58
Idolon

最近の時間のカスタムハンドラーと、より離れた日付の標準ハンドラーが必要なようです。このようなものはうまくいくでしょう:

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 "....";
    }
}
1
Dave