(转)优雅的微博时间显示接口(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.     }  

 

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

posted @ 2013-03-04 17:19  GreyWolf  阅读(649)  评论(0编辑  收藏  举报