现在手头在做的模块有一个功能涉及了时间戳,我需要将时间戳转换成时间,这个时间和一系列的值之后会用来画图,时间是横轴,因此时间是不可以重复的.
我接收的时间戳都是不同的,但是我转换的时间却是相同的,因此我才注意到了时间戳是区分位数的.
我是这样转换成日期的:
//时间戳是我接收的数据,是String类型,这里直接写一个作为例子
String timeStamp="1534730732790";
//想要日期生成的格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//这里要转换成long类型,不然下面一句会显示方法过时,画删除线,并且运行报错,截图在下面
long stampTime = Long.parseLong(timeStamp);
//时间戳转换成对应格式的日期
String sd = sdf.format(new Date(stampTime));
时间戳不转换成long的报错:
正确结果:
言归正传,我代码写的转换格式是精确到秒的,恰好我接收的这批时间戳的前十位都是一样的,只有后三位在变化,也就是说我接收的数据秒数都是一样的,是一秒之内的时间,因此如果只截取精确到秒的时间,就出现了转换成的时间都一样的情况,因此就不能生成我需要的图.13位的时间戳的前十位是精确到秒的,后三位是毫秒(秒和毫秒差1000倍),所以我在截取时间的时候需要将后三位的毫秒也加上,才能标识出这批时间戳之间的不同.一般是这样加的:
String time="1534730732790";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long stampTime = Long.parseLong(time);
//获取毫秒位(时间戳的最后三位)
String mm=time.substring(time.length()-3);
String sd = sdf.format(new Date(stampTime))+" "+mm;
结果:
总结:13位的时间戳后三位是毫秒,如果时间变化的非常小的时候就需要精确到毫秒,同理16位的是精确到微秒的,后三位是微秒