zoukankan      html  css  js  c++  java
  • (转)优雅的微博时间显示接口(Java实现)


    现在的位置: 首页 > 编程语言 > Java > 正文
     
    优雅的微博时间显示接口(Java实现)
    2012年11月05日 ⁄ JavaM5原创编程语言 ⁄ 共 4745字 ⁄ 暂无评论

    今天继续摆弄了一下 Weibo 开放平台,发现获取到的博文发表时间是时间戳,这个处理就不说了,今天要说的是,想跟官方微博显示一样的“刚刚”,“5秒前”,“25分钟前”,“2小时前”,“昨天”,“2天前”。展示出这样的时间显示方式给大家。


    先来看一下我效果预览图:

    优雅的微博时间显示

    其实处理时相当简单额,今天我就在这里为大家展示Java的实现方式。

    首先创建一个getFarmatTime方法,供后面时间处理的时候使用。

     
    1. /**  
    2.      * Description:<code> 返回指定格式的Date </code> By 天琪 at 2012-10-30 下午6:22:12  
    3.      * String  
    4.      *   
    5.      * @param date  
    6.      * @param Sdf  
    7.      * @return  
    8.      * @throws  
    9.      */  
    10.     public static String getFormatTime(Date date, String Sdf) {   
    11.         return (new SimpleDateFormat(Sdf)).format(date);   
    12.     }  

     接下来就是对获取到时间戳做一个处理:

     
    1. // 得到两个时间之前的毫秒差 ,其中creatAt是从Weibo 接口获取到时间戳,为Linux时间戳,为DataTime类型。
    2. long millisecond = new Date().getTime() - createAt.getTime();   
    3.   
    4. long second = millisecond / 1000// 转换为秒   
    5.   
    6. // 判断,如果返回的时间差小于等于0秒,则赋值为0   
    7. if (second <= 0) {   
    8.     second = 0;   
    9. }  

    经过上面一些处理过后,我们的时间已经转换为秒了,这样更加便于后面的处理。

    下面的便是核心处理代码了:

     
    1. // 注意这里传递的second,已经在上面一步转换为(秒)了   
    2.   
    3.         if (second == 0) {   
    4.             // 如果等于0秒,显示刚刚。   
    5.             interval = "刚刚";   
    6.         } else if (second < 30) {   
    7.             // 小于30秒,则显示为second秒以前。   
    8.             interval = second + "秒以前";   
    9.         } else if (second >= 30 && second < 60) {   
    10.             // 大于30秒,小于60秒,则显示为“半分钟前”。   
    11.             interval = "半分钟前";   
    12.         } else if (second >= 60 && second < 60 * 60) {   
    13.             // 大于60秒,小于一个小时(60*60),则将秒数换算分钟数,显示多少分钟以前。   
    14.             long minute = second / 60;   
    15.             interval = minute + "分钟前";   
    16.         } else if (second >= 60 * 60 && second < 60 * 60 * 24) {   
    17.             // 大于一个小时,小于1天(60*60*24),则将秒数转化成小时。   
    18.             long hour = (second / 60) / 60;   
    19.             // 如果小于3个小时,则显示 “hour小时前”。   
    20.             if (hour <= 3) {   
    21.                 interval = hour + "小时前";   
    22.             } else {   
    23.                 // 否则显示“今天 hh:mm”,显示今天具体小时和分钟数。   
    24.                 interval = "今天" + getFormatTime(createAt, "hh:mm");   
    25.             }   
    26.         } else if (second >= 60 * 60 * 24 && second <= 60 * 60 * 24 * 2) {   
    27.             // 大于一点,小于两天的,则表示是昨天发表的,显示为“昨天”,加上具体的时间。   
    28.             interval = "昨天" + getFormatTime(createAt, "hh:mm");   
    29.         } else if (second >= 60 * 60 * 24 * 2 && second <= 60 * 60 * 24 * 7) {   
    30.             // 大于两天,小于7天的,则将秒数转换为天数,直接显示多少天前。   
    31.             long day = ((second / 60) / 60) / 24;   
    32.             interval = day + "天前";   
    33.         } else if (second >= 60 * 60 * 24 * 7) {   
    34.             // 如果时间大于7天,则直接显示具体月份日期和时间,格式为:月-日 时:分(MM-dd hh:mm)   
    35.             interval = getFormatTime(createAt, "MM-dd hh:mm");   
    36.         } else if (second >= 60 * 60 * 24 * 365) {   
    37.             // 如果时间大于一年(365天),则需要在上一个条件的基础上加上年,显示为:年-月-日 时:分(YYYY-MM-dd hh:mm)   
    38.             interval = getFormatTime(createAt, "YYYY-MM-dd hh:mm");   
    39.         } else {   
    40.             // 避免出现时间异常,不再上面的条件之类的时间,全部赋值为0.   
    41.             interval = "0";   
    42.         }   

    是不是相当简单呢,我在代码的时间转换上面采用了分离规则来计算,全部采用时间换算率,便于大家理解,例如60*60则是一个小时,60*60*24,则是一天,60*60*24*3,则是3天,以此类推,这样是不是更加便于大家理解呢。

    好了,接下来,给大家贴上实现类完整的实现方法:

     
    1. /**  
    2.      * Description:<code> 处理微博过去时间显示效果 </code> By 古木天琪 at 2012-10-30 下午5:16:37  
    3.      * @param createAt  
    4.      *            Data 类型  
    5.      * @return { String }
    6.      * @throws  
    7.      */  
    8.     public static String getInterval(Date createAt) {   
    9.         //定义最终返回的结果字符串。   
    10.         String interval = null;   
    11.   
    12.         long millisecond = new Date().getTime() - createAt.getTime();   
    13.   
    14.         long second = millisecond / 1000;
    15.   
    16.         if (second <= 0) {   
    17.             second = 0;   
    18.         }   
    19.   
    20.         if (second == 0) {   
    21.             interval = "刚刚";   
    22.         } else if (second < 30) {   
    23.             interval = second + "秒以前";   
    24.         } else if (second >= 30 && second < 60) {   
    25.             interval = "半分钟前";   
    26.         } else if (second >= 60 && second < 60 * 60) {   
    27.             long minute = second / 60;   
    28.             interval = minute + "分钟前";   
    29.         } else if (second >= 60 * 60 && second < 60 * 60 * 24) {   
    30.             long hour = (second / 60) / 60;   
    31.             if (hour <= 3) {   
    32.                 interval = hour + "小时前";   
    33.             } else {   
    34.                 interval = "今天" + getFormatTime(createAt, "hh:mm");   
    35.             }   
    36.         } else if (second >= 60 * 60 * 24 && second <= 60 * 60 * 24 * 2) {   
    37.             interval = "昨天" + getFormatTime(createAt, "hh:mm");   
    38.         } else if (second >= 60 * 60 * 24 * 2 && second <= 60 * 60 * 24 * 7) {   
    39.             long day = ((second / 60) / 60) / 24;   
    40.             interval = day + "天前";   
    41.         } else if (second >= 60 * 60 * 24 * 7) {   
    42.             interval = getFormatTime(createAt, "MM-dd hh:mm");   
    43.         } else if (second >= 60 * 60 * 24 * 365) {   
    44.             interval = getFormatTime(createAt, "YYYY-MM-dd hh:mm");   
    45.         } else {   
    46.             interval = "0";   
    47.         }   
    48.         // 最后返回处理后的结果。   
    49.         return interval;   
    50.     }  

    这样的过去时间显示风格,是不是很优雅了,实现方式也是很优雅的。当然这不是唯一的实现方式,欢迎有兴趣的朋友来补充,共同讨论,共同进步哦,如果正在做微博类应用的朋友,或者需要使用过去时间显示风格的朋友,可以直接拿过去使用,很是方便的工具类。

  • 相关阅读:
    WCF-配置
    乡下人生活录——程序员给自己买份保险吧
    Sqlserver表分区
    Oracle通过Navicat导入表数据与机构,数据无法直接查询,需要加双引号的问题
    19.Imagetragick 命令执行漏洞(CVE-2016–3714)
    18.phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
    17.[CVE-2017-12615]Tomcat任意文件上传漏洞
    16.Tomcat弱口令 && 后台getshell漏洞
    15.Nginx 解析漏洞复现
    14.Nginx 文件名逻辑漏洞(CVE-2013-4547)
  • 原文地址:https://www.cnblogs.com/greywolf/p/2943108.html
Copyright © 2011-2022 走看看