-1

今、私はAndroid Time Agoを続けていますが、数日前には取得していませんが、数週間前には取得していません

ここで私は試しました:

CharSequence    CS = DateUtils.getRelativeTimeSpanString(DateUtils.MINUTE_IN_MILLIS, now.getTime(),
                    DateUtils.WEEK_IN_MILLIS, 0);

まさに私が必要としているのは、1週間以内にこれらの多くの日数が残っていることを示す必要があるかどうかです.

1 週間以上が何週で 1 か月に達するかを示す場合、1 か月前または 2 か月前を表示する必要があります。

どうすればこれを手に入れることができますか?

4

2 に答える 2

0

の既存のメソッドを介してそれを行うことはできませんDateUtils。そのためにこの実装を使用できますが、過去 (週、月、年) に対してのみ正しく機能することに注意してください。future を処理したい場合は、そのユースケースに注意する必要があります。

public static final long AVERAGE_MONTH_IN_MILLIS = DateUtils.DAY_IN_MILLIS * 30;

private String getRelationTime(long time) {
    final long now = new Date().getTime();
    final long delta = now - time;
    long resolution;
    if (delta <= DateUtils.MINUTE_IN_MILLIS) {
        resolution = DateUtils.SECOND_IN_MILLIS;
    } else if (delta <= DateUtils.HOUR_IN_MILLIS) {
        resolution = DateUtils.MINUTE_IN_MILLIS;
    } else if (delta <= DateUtils.DAY_IN_MILLIS) {
        resolution = DateUtils.HOUR_IN_MILLIS;
    } else if (delta <= DateUtils.WEEK_IN_MILLIS) {
        resolution = DateUtils.DAY_IN_MILLIS;
    } else if (delta <= AVERAGE_MONTH_IN_MILLIS) { 
        return Integer.toString((int) (delta / DateUtils.WEEK_IN_MILLIS)) + " weeks(s) ago";
    } else if (delta <= DateUtils.YEAR_IN_MILLIS) {
        return Integer.toString((int) (delta / AVERAGE_MONTH_IN_MILLIS)) + " month(s) ago";
    } else {
        return Integer.toString((int) (delta / DateUtils.YEAR_IN_MILLIS)) + " year(s) ago";
    }
    return DateUtils.getRelativeTimeSpanString(time, now, resolution).toString();
}
于 2014-12-12T10:17:19.660 に答える