Google Hangouts喜欢"之前"时间跨度

时间:2015-08-01 17:33:40

标签: android html date time

我一直在尝试使用

DateUtils.getRelativeTimeSpanString()

...生成类似于Google Hangouts应用的已用时间字符串。

但是,我得到的字符串如下:

1 min ago
58 min ago
10 hours ago
yesterday
3 days ago
1 week ago 

环聊应用会显示如下字符串:

Now
58 min ago
11:05     (if time is more than 1 hour ago, it'll show the original time)
yesterday
Wed       (if the day was more than 1 day ago, it'll show the day)
July 21   (if more than 1 wee ago, it'll show the date)

类似环聊的格式是我正在寻找的。

如果我在此方法中使用了错误的标记,或者环聊应用使用不同的方法/库来生成时间跨度字符串,那就太好奇了。如果DateUtils没有提供我正在寻找的内容,我可以进行自定义实现。

1 个答案:

答案 0 :(得分:0)

我最终做了不同的DateUtils格式化程序的组合:

@SuppressLint("SimpleDateFormat")
public static String getTimeSpanString(Context mContext, long time, boolean showTime) {

    int flags = DateUtils.FORMAT_ABBREV_RELATIVE | DateUtils.FORMAT_ABBREV_ALL;

    if(showTime) {
        flags |= DateUtils.FORMAT_SHOW_TIME;
    }

    long now = new Date().getTime();
    long duration = now - time;

    if(duration < DateUtils.HOUR_IN_MILLIS) {
        return DateUtils.getRelativeTimeSpanString(time, now, 0, flags).toString();
    } else if (DateUtils.isToday(time)) {
        SimpleDateFormat timeInstance;
        if(DateFormat.is24HourFormat(mContext)) {
            timeInstance = new SimpleDateFormat("HH:mm");
        } else {
            timeInstance = new SimpleDateFormat("hh:mm a");
        }

        return timeInstance.format(time);
    } else if (duration < DateUtils.WEEK_IN_MILLIS) {
        return DateUtils.formatDateTime(mContext,time,flags | DateUtils.FORMAT_SHOW_WEEKDAY);
    }

    return DateUtils.formatDateTime(mContext, time, flags | DateUtils.FORMAT_SHOW_DATE);
}