问题描述
业务上需要统计用户在线时长,数据库里存的两个相关字段是时间类型,我将两个字段相减得出了一个时间,格式如下: 在后台内存将date类型的时长转换为Integer类型的分钟数,使用getTime()/(60*1000),结果发现转换出来的数据值偏小,并且出现了负数。
问题追踪
找一个为负值的记录,进入断点,发现在换算是date值是这样的:
发现在开始计算前date的fasttime值就已经为负了,所以结果为负值不是下面计算的锅;
问题解决
date的值显然是大于1970-01-01的,而fastTime却为负,我感觉有点奇怪。百撕之际,晃眼看到了date的时区,上面显示date的时区为CST,嘿,好像找到原因了:
加上两个时区的偏移量,问题解决。
知识扩展
网上找到的一片关于时区的博客:点我前去围观