Web项目中时区问题

804 阅读1分钟

此坑的症状

在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"是将时区改为东八区。也有全局配置,这里就不说了。

总结

统一时区,不要纠结,就可以解决问题。