8.3 应用开发最佳实践

8.3.1 解析消息创建时间

每种类型的消息都包含有一个共同的参数CreateTime,它表示消息的创建时间,是整型的,而不是我们所熟悉的标准格式(yyyy-MM-dd HH:mm:ss)的时间。CreateTime表示1970年1月1日0时0分0秒至消息创建时所间隔的秒数,注意是间隔的秒数,而不是毫秒数。那么,如何才能将CreateTime转换成熟悉的格式呢?

在Java中,我们也经常会通过下面两种方式来获取整型(长整型)的时间,但得到的是1970年1月1日0时0分0秒0毫秒至当前时间所间隔的毫秒数。

  1. /**
  2. * 演示Java中常用的获取long类型时间的两种方式
  3. */
  4. public static void main(String[] args) {
  5. long longTime1 = System.currentTimeMillis();
  6. // 1382531124088
  7. System.out.println(longTime1);
  8.  
  9. long longTime2 = new java.util.Date().getTime();
  10. // 1382531124088
  11. System.out.println(longTime2);
  12. }

如果需要将上面程序运行得到的long类型的时间转换成标准格式的时间,需要通过SimpleDateFormat类来实现,代码如下:

  1. 1 /**
  2. 2  * 将long类型的时间转换成标准格式(yyyy-MM-dd HH:mm:ss)
  3. 3  *
  4. 4  * @param longTime
  5. 5  * @return
  6. 6  */
  7. 7 public static String formatTime(long longTime) {
  8. 8  DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  9. 9  return format.format(new Date(longTime));
  10. 10 }
  11. 11 
  12. 12 public static void main(String[] args) {
  13. 13  // 当前时间(距离1970年1月1日0时0分0秒0毫秒的毫秒数)
  14. 14  long longTime = 1382531124088L;
  15. 15  // 输出:2013-10-23 20:25:24
  16. 16  System.out.println(formatTime(longTime));
  17. 17 }

重点在第8、9两行,首先通过Date类的构造方法Date(long date)将long类型的时间转换成Date类型,再通过SimpleDateFormat类将Date类型的时间格式化成标准时间格式。

根据前面的介绍,如果我们要将CreateTime转换成标准格式,只需先将其转换成long类型,然后乘以1000(秒转化成毫秒),就可以用上面的方法进行转换了。完整的转换方法如下:

  1. /**
  2. * 将微信消息中的CreateTime转换成标准格式的时间(yyyy-MM-dd HH:mm:ss)
  3. *
  4. * @param createTime 消息创建时间
  5. * @return
  6. */
  7. public static String formatTime(String createTime) {
  8. // 将微信传入的CreateTime转换成long类型,再乘以1000
  9. long msgCreateTime = Long.parseLong(createTime) * 1000L;
  10. DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  11. return format.format(new Date(msgCreateTime));
  12. }