mysql相差10小时_java取出mysql时间字段,相差数个小时

#情景描述

以Mysql作为数据库的JavaWeb项目,对于Mysql中的Time,Date,DateTime类型,Java的对应类型都是Date。Java程序在存储和读取相应字段的数据的时候,有时候会发现,存进去的不是预期的时间值,或者读取出来后发现和实际预期的会有偏差。举个例子,想要操作存储的时间是2017-01-01 08:00:00,但是实际呈现出来的是2017-01-01 08:00:00,差了8小时有没有?这个会根据不同情况有所相差,一般都差一些个小时数,对应的分和秒数据却是一致的。

#问题分析 mysql中发现存的确实是2017-01-01 08:00:00,但是Java中读取中到对应的Entity中时就自动变成2017-01-01 16:00:00,这个从数据库中读取出来就没有经过其他程序的任务处理直接就变动了。分析可能就是因为Web服务器上的时区/时间和Mysql服务器时区时间不一致。

1.可能JavaWeb项目中时区和Mysql时区不一致 在mysql中进入命令模式,敲入下面命令: show variables like '%time_zone%';通过该命令可以查看MySQL时区。

Java程序中,使用TimeZone.getDefault()

二者对比一下查看是否不同时区,不一致的情况下对时区进行调整到一致

2.上述时区一致时,还出现该情况,查查是否Java Web项目连接串中加了?servertimezone=utc,尝试去掉,再试试结果看看,这里网上有人说去掉后会出现无法识别timezone的乱码问题,建议不要使用mysql connector 6.0.x以上版本,要使用5.1.x的版本,并且不加上servertimezone。可能是个BUG

#问题解决 我遇到的情况是相差了八个小时,时区不一致,且改成一致了后还出现。其中解决方法是这样的:

show variables like '%time_zone%'; TimeZone.getDefault() 发现不一致,然后修改了Mysql的时区

修改Mysql时区命令

set time_zone='+8:00'; show variables like '%time_zone%';

查看后改变了,再运行,还是出现了问题

然后把mysql连接串servertimezone去掉也不行,换成GMT也不行

最后变成Asia/Shanghai或者PRC才可以,目前项目时间上正常了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值