我一直在尝试使用
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没有提供我正在寻找的内容,我可以进行自定义实现。
答案 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);
}