最近做股票数据项目所以接触到时间格式转换问题,以下为个人经验以做参考:
因为是用JAVA所以必须用到Date这个类。
java.util.Date 在API中描述为代表一个特定的瞬间时间,以毫秒精度。
在项目中我们通过Sockect实际拿到的数据格式[1438725620,852,4156,0,0,0],分别是时间,价格,交易额等其他数据。可以看出这里时间和我们要显示的时间2015:08:06:14:09:54是有区别的。这个时候我们就要拿出new Date()来转换。
System.out.println(new Date(1438725620l));
输出:Sat Jan 17 23:38:45 CST 1970
一看这么复杂不行啊,于是我们必须再用SimpleDateFormat美化下。
SimpleDateFormat format = new SimpleDateFormat("yyyy:MM:dd:HH:mm");
System.out.println(format.format(new Date(1438725620l)));
输出:1970:01:17:23:38:45
结果看上去是比上面能接受了,但项目检查一看1970年?搞什么啊?(项目中踩过的坑啊!)
我们用System.currentTimeMillis()取出系统输出时间做比较
1438842068454(系统输出)
1438725620 (项目获取)
发现好像少了几位数字,所以时间变小了。原来我们在项目中获取的时间被截取毫秒,所以看上去时间变短了。这样*1000不就解决问题了。
System.out.println(format.format(new Date(1000*1438725620l)));
这才是我们想要的结果 2015:08:05:06:00:20
注意深坑: java.util.Date(long date);传入的是long型的数据。如果你获取的数据是int型一定要记得强转。不然*1000会溢出;然后在转成时间数据时会被截取丢失。。。