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毫秒至当前时间所间隔的毫秒数。
- /**
- * 演示Java中常用的获取long类型时间的两种方式
- */
- public static void main(String[] args) {
- long longTime1 = System.currentTimeMillis();
- // 1382531124088
- System.out.println(longTime1);
- long longTime2 = new java.util.Date().getTime();
- // 1382531124088
- System.out.println(longTime2);
- }
如果需要将上面程序运行得到的long类型的时间转换成标准格式的时间,需要通过SimpleDateFormat类来实现,代码如下:
- 1 /**
- 2 * 将long类型的时间转换成标准格式(yyyy-MM-dd HH:mm:ss)
- 3 *
- 4 * @param longTime
- 5 * @return
- 6 */
- 7 public static String formatTime(long longTime) {
- 8 DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- 9 return format.format(new Date(longTime));
- 10 }
- 11
- 12 public static void main(String[] args) {
- 13 // 当前时间(距离1970年1月1日0时0分0秒0毫秒的毫秒数)
- 14 long longTime = 1382531124088L;
- 15 // 输出:2013-10-23 20:25:24
- 16 System.out.println(formatTime(longTime));
- 17 }
重点在第8、9两行,首先通过Date类的构造方法Date(long date)将long类型的时间转换成Date类型,再通过SimpleDateFormat类将Date类型的时间格式化成标准时间格式。
根据前面的介绍,如果我们要将CreateTime转换成标准格式,只需先将其转换成long类型,然后乘以1000(秒转化成毫秒),就可以用上面的方法进行转换了。完整的转换方法如下:
- /**
- * 将微信消息中的CreateTime转换成标准格式的时间(yyyy-MM-dd HH:mm:ss)
- *
- * @param createTime 消息创建时间
- * @return
- */
- public static String formatTime(String createTime) {
- // 将微信传入的CreateTime转换成long类型,再乘以1000
- long msgCreateTime = Long.parseLong(createTime) * 1000L;
- DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- return format.format(new Date(msgCreateTime));
- }