本例基于Linux系统下的解决方法。
mysql数据库插入时间与系统时间相差12小时
问题出现缘由
今天发现Java后端用new Date()获取到的时间插入到mysql时候却相差了12个小时。前提是系统时间正常,数据库时间正常(此处的正常是指时区为北京时区,数据库时间也设置GMT+8),排除了以上两个可能出现问题的可能性之后。后来发现tomcat启动打印时间就已经与系统相差12个小时了。那此时就考虑是否是tomcat的时间配置问题。
解决方法
1. 修改JVM时间
打开java目录下/jre/lib/zi/文件目录,该目录下有各时区文件,首先备份下原有的GMT文件,然后把相差N小时对应的文件重命名为GMT,比如我比系统相差12小时,那就把GMT+12更改为GMT。
结果
此方法无效,我以为是+12不对,就rename了GMT-12,发现重启tomcat也无效。
2.修改catalina.sh文件
打开 tomcat目录下/bin/catalina.sh文件,在文件的开头写入:
export JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Asia/shanghai"
然后重启了tomcat。
结果
此方法奏效,tomcat日志打印日期与系统一致。