此坑的症状
在web开发中经常遇会到,ajax请过过来的日期时间转换成Date对象时,会莫名其妙的多8个小时;或者存入Mysql数据后,在数据库中显示的也会多8个小时。导致关于时间的计算,查询都会出现错误。
分析症状
msyql、mybatis、spring的json转换的包,这些工具确实好用,可是其作者都不是本国的,他们的对于时间的默认参考肯定不是我国的时区。正是这样我们的传的时间就会转换为国外的时间,多几个小时,少几个小时,怎么换算我是想不清楚的。
解决办法
统一各工具的时区为东八区,如果在其他国家,就统一为当地的时区。
mysql:
设置全局的时区:SET GLOBAL time_zone = '+8:00';
设置当前会话的时区:SET time_zone = '+8:00';
刷新:FLUSH PRIVILEGES;
mybatis:
设置jdbc连接地址:jdbc:mysql://127.0.0.1:3306/e_home?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
serverTimezone=Asia/Shanghai(上海是东八区或者香港、北京都可以)
json转换包:
设置转换的默认时区:在Date字段上加@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
timezone = "GMT+8"是将时区改为东八区。也有全局配置,这里就不说了。
总结
统一时区,不要纠结,就可以解决问题。