清明时节雨纷纷,闲来无事当码农;显示详细时间案例

项目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));

其实还可以把这些更扩展一下,比如几分钟前,几小时前这样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Auspicious5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值