java:记一次因时区导致出参和入参时差8小时前因后果

本来是开开心心敲代码的一天,结果今天早上闲来无事去服务器查看下数据,咦,数据好像早于现实时间8小时

注:当前时间为2019-11-06 08:43:57

然后初步判断是否是因为mysql数据库时区问题导致早8小时,于是查看数据库的时区

java:记一次因时区导致出参和入参时差8小时前因后果_第1张图片

数据库无误,然后问题定位到是否是服务器的时间,于是执行执行date命令查看服务器时间,也发现没问题。

初步排除服务器和mysql数据库的问题。然后后台debug查询数据发现出参数据竟然又恢复正常,一度怀疑我眼瞎了。。。

那么,现象很明确,数据库入参数据早8小时,查询出来的数据比数据库晚8小时,此时想起链接jdbc的参数似乎有设置serverTimezone参数,于是上配置文件查看,果然,时区有问题

度娘曰:UTC是世界统一时间,中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚、菲律宾、西澳大利亚州的时间与UTC的时差均为+8,也就是说中国大陆时区和这个时区相差8小时。

应该用上海时间Asia/Shanghai,于是改成serverTimezone=Asia/Shanghai,恢复正常。

此刻,真想大白!,总体来说,分为两个问题

step1 为啥插入数据到数据库的数据晚于实际8小时

由于数据源配置的时区问题,世界统一时间比中国大陆早8个小时,所以入库数据也早8小时。

step2 为啥页面数据又是正常的时间

由于java获取默认时区是Asia/Shanghai,所以自动还原以Asia/Shanghai为时区的时间

附图证明:

java:记一次因时区导致出参和入参时差8小时前因后果_第2张图片

谢谢阅读,如果对你有帮助请点个赞再走吧~

你可能感兴趣的:(java:记一次因时区导致出参和入参时差8小时前因后果)