记一次时间转时长因为时区不同导致的问题

记一次时间转时长因为时区不同导致的问题

  • 问题描述
  • 问题追踪
  • 问题解决
  • 知识扩展

问题描述

业务上需要统计用户在线时长,数据库里存的两个相关字段是时间类型,我将两个字段相减得出了一个时间,格式如下:记一次时间转时长因为时区不同导致的问题_第1张图片 在后台内存将date类型的时长转换为Integer类型的分钟数,使用getTime()/(60*1000),结果发现转换出来的数据值偏小,并且出现了负数。

问题追踪

找一个为负值的记录,进入断点,发现在换算是date值是这样的:
记一次时间转时长因为时区不同导致的问题_第2张图片
发现在开始计算前date的fasttime值就已经为负了,所以结果为负值不是下面计算的锅;

问题解决

date的值显然是大于1970-01-01的,而fastTime却为负,我感觉有点奇怪。百撕之际,晃眼看到了date的时区,上面显示date的时区为CST,嘿,好像找到原因了:
记一次时间转时长因为时区不同导致的问题_第3张图片
加上两个时区的偏移量,问题解决。

知识扩展

网上找到的一片关于时区的博客:点我前去围观

你可能感兴趣的:(开拓随笔,java)