记一次JVM时区引发的问题

在处理业务需求时,发现一个接口在统计时间点前数据库数据时,传入23:00和不传时间得到的结果不一致。进一步排查发现,尽管本地和服务器显示为东八区,但JVM实际使用的时区与预期不符,导致时间转换错误。通过检查发现,服务器的基础镜像时区设置有误,更换镜像或手动设置时区解决了问题。
摘要由CSDN通过智能技术生成

问题描述:
有个业务需求,统计某个时间点之前数据库中的数据,不传时间的话就统计所有,接口写完之后做了两个测试,分别是不传时间和传当天晚上23:00的时间,当天晚上23:00属于未来时间,两次统计的记录数应该是一样的才对,可事实是两者不一致。

传23:00的时间的统计数据每次统计的结果是一样的,比不传时间统计的数据要少,不传时间每次统计的数据都是不一样的,因为数据库的数据一直在变,所以23:00的时间统计的一直是某个历史时间的数据,因为统计结果每次都一样,当时下意识看了下时间,是17点多,而公司的业务除了国内还有美国,数据时不时的有时区问题,第一直觉是时区问题,就以15:00作为参数,直接用sql统计了一下数据库的数据,果然跟通过postman传23:00的统计结果是一致的。

如果是时区问题,那到底是哪里出问题了呢?本机是Shanghai,服务器上通过date -R查看也是东八区,Java不应该默认使用的本机时区吗?打开MySQL的日志收集,查看sql,虽然postman传的23:00,数据库日志打印的确实是15:00。

解决方案:
问题确实是时区问题,jvm默认确实是使用的本机时区设置,但,不是通过date -R查看。JVM默认获取的Centos和Ubuntu的时区是文件/etc/localtime的时区。通过以下命令查看:

#ls -l /etc/localtime
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值