项目jar包地址:
http://download.csdn.net/detail/lovefive5/9803598
好了,进入正题
最近在做一个即时通讯+短信方面的App。
大家都知道,现在的APP都需要显示时间,这是必不可少的,就像QQ这样。
而我想的是怎样把时间显示的更详细的一些。
不多说,上部分模拟数据结果
其实这个东西实现起来很简单,因为用的地方太多了,我就把它抽取出来了!
好了,现在看代码
1.静态常量
public class StaticString {
public static final String year="年";
public static final String month="月";
public static final String day="日";
}
2.分割时间
主要是把系统时间和用户传递过来的long型时间,分割成年月日等,并将时间用ArrayList保存起来(数组也可以,都差不多)
// 分割出时间的具体每一个时间
private ArrayList<String> splitSystemTime(long time) {
ArrayList<String> TimeDetail = new ArrayList<>();
// 时间字符串显示
String stringtime = format.format(time);
// 分割出年
String[] str1 = stringtime.split(StaticString.year);
SystemYear = str1[0];
// 分割出月
String[] str2 = str1[1].split(StaticString.month);
SystemMonth = str2[0];
// 分割出日
String[] str3 = str2[1].split(StaticString.day);
SystemDay = str3[0];
//分割出剩余时间 如:10:20
SystemHour = str3[1];
TimeDetail.add(SystemYear);
TimeDetail.add(SystemMonth);
TimeDetail.add(SystemDay);
TimeDetail.add(SystemHour);
return TimeDetail;
}
3.对比时间
将系统时间和用户传递时间进行对比,显示时间详情
public String getTime(long time) {
//格式化完整时间
format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
format1 = new SimpleDateFormat("MM月dd日 HH:mm");
String StringTime = null;
//获取系统时间分割集合
ArrayList<String> SystemDetailTime = splitSystemTime(System.currentTimeMillis());
//获取用户传递时间分割结果
ArrayList<String> NowDetailTime = splitSystemTime(time);
// 如果年份相同,继续对比,否则直接显示
if (SystemDetailTime.get(0).equals(NowDetailTime.get(0))) {
// 如果月份相同,继续对比,否则直接显示
if (SystemDetailTime.get(1).equals(NowDetailTime.get(1))) {
// 如果天数相同,显示简单的HH:mm,否则计算天数差
String SystemDetailDay = SystemDetailTime.get(2);
String NowDetailDay = NowDetailTime.get(2);
if (SystemDetailDay.equals(NowDetailDay)) {
StringTime = NowDetailTime.get(3);
} else {
// 计算天数差
int a = Integer.parseInt(SystemDetailDay);
int b = Integer.parseInt(NowDetailDay);
// 显示前后两天详情
if((a-b)>-3||(a-b)<3){
switch (a - b) {
case 1:
StringTime = "昨天" + NowDetailTime.get(3);
break;
case 2:
StringTime = "前天" + NowDetailTime.get(3);
break;
case -1:
StringTime = "明天" + NowDetailTime.get(3);
break;
case -2:
StringTime = "后天" + NowDetailTime.get(3);
break;
}
}
//差3天就直接给用户显示MM月dd日 HH:mm
else{
StringTime = format1.format(time);
}
}
} else {
StringTime = format1.format(time);
}
} else {
StringTime = format.format(time);
}
return StringTime;
}
4.考虑
这里我考虑到也许有些人想显示出星期详情,例如:10月 21日 星期二 这样的
但是其实我个人认为这样是非常影响用户体验的。
因为用户想要的是更直观的了解到我这条信息是哪天发的呀,今天or昨天,前天or大前天类似的。不会看见是星期二发的,大脑还再去计算的计算是啥时候,这样就无意义了!
不过我把计算星期方式放上来,虽然没有实现。。。
//set 年月日 获得星期详情
Calendar c = Calendar.getInstance();
c.set(2016, 5, 20);
c.get(Calendar.DAY_OF_WEEK);
System.out.println(c.get(Calendar.DAY_OF_WEEK));
其实还可以把这些更扩展一下,比如几分钟前,几小时前这样。