JDK中提供了好用的SimpleDateFormat工具来帮我们把格式化时间,并且制定了格式化的规范,只要我们按照规范传入字符串,就能随意定制我们想要的时间格式,例如:
- 传入"yyyy.MM.dd G 'at' HH:mm:ss z",就能得到2001.07.04 AD at 12:08:56 PDT
- 传入"EEE, MMM d, ''yy",就能得到Wed, Jul 4, '01
- 传入"h:mm a",就能得到12:08 PM
等等,具体用法 可以查阅官方文档,用起来也非常方便。
但是近些年移动互联网发展迅速,用户体验也被越来越多的重视起来,对于时间的显示也越来越人性化。比如说聊天记录的时间,人们更愿意看到"两分钟前","一小时前","昨天"等样式,而不是冷冰冰的几月几号几点几分。
当产品给出了如上的需求时,很多开发者都是去判断要显示的时间与当前时间的相对间隔,然后再查表得出需要显示的时间。殊不知,安卓已经给我们提供好了相应的工具,只需一个方法调用统统搞定。该工具就是今天的主角DateUtils,位于android.text.format包下。
作为系统提供的工具,当然也会发挥本地化的优势。格式化出来的时间也会跟随系统系统自动变化,比如说如果系统默认语言是中文,格式化出来的时间是"一分钟前",而如果系统语言是英语,格式化的时间就变成"one minute ago",省去了翻译字符串的麻烦。
小试牛刀
按照上面描述的需求,我们来看看用DateUtils如何实现:
long currentTimeMillis = System.currentTimeMillis();
//两分钟前
Log.d(TAG, "getRelativeTimeSpanString " + DateUtils.getRelativeTimeSpanString(
currentTimeMillis - 2 * 60 * 1000));
//三个小时前
Log.d(TAG, "getRelativeTimeSpanString " + DateUtils.getRelativeTimeSpanString(
currentTimeMillis - 3 * 60 * 60 * 1000));
//一天前
Log.d(TAG, "getRelativeTimeSpanString " + DateUtils.getRelativeTimeSpanString(
currentTimeMillis - 28 * 60 * 60 * 1000));
打印出来的结果如下:
08-12 15:43:30.454 13935-13935/com.wangng.myapplication D/DateUtilsTAG: getRelativeTimeSpanString2 分钟前
08-12 15:43:30.454 13935-13935/com.wangng.myapplication D/DateUtilsTAG: getRelativeTimeSpanString3 小时前
08-12 15:43:30.464 13935-13935/com.wangng.myapplication D/DateUtilsTAG: getRelativeTimeSpanString昨天
getRelativeTimeSpanString有几个重载方法:
public static CharSequence getRelativeTimeSpanString(lo