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

本文记录了一次因时区不同导致的时间转时长问题,详细描述了问题的发现、追踪及解决过程。通过调整时区偏移量,成功解决了时间转换中出现的负数和偏差问题,同时扩展了时区相关的知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

问题描述

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

问题追踪

找一个为负值的记录,进入断点,发现在换算是date值是这样的:
在这里插入图片描述
发现在开始计算前date的fasttime值就已经为负了,所以结果为负值不是下面计算的锅;

问题解决

date的值显然是大于1970-01-01的,而fastTime却为负,我感觉有点奇怪。百撕之际,晃眼看到了date的时区,上面显示date的时区为CST,嘿,好像找到原因了:
在这里插入图片描述
加上两个时区的偏移量,问题解决。

知识扩展

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值