JDK时区问题

作者: 灰灰H_K | 来源:发表于2019-08-27 15:30 被阅读0次

今天碰到一个大坑,弄了快一个小时才解决掉;

一个管理台后端服务,用docker隔离了三个容器,oracle,nginx,tomcat;后发现管理台查出来的时间和现实时间相差8个小时,一查是linux时区问题;


  • 于是改之,三台容器都输入一下代码
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

测试了一下,发现问题docker容器的时区是正确了,可是问题并未得到解决,数据库时间还是慢了8个小时。


  • 于是又查资料,换另外一种设置时区的方法;
vi /etc/sysconfig/clock

在里面输入如下内容

ZONE="Asia/Shanghai"
UTC=false
ARC=false

保存,重启,测试。。。。。发现还是一样,快疯了


  • 第三种方法,设置TZ环境变量

设置环境变量可以在设置系统级别的/etc/profile ,也可以设置用户级别的home目录的.bashrc。由于用的是docker,防止变量重启失效,只能在.bashrc里设置。在.bashrc加入如下内容:

export TZ='CST-8'

保存:然后执行

source .bashrc

使设置立即生效。

重启容器,测试,发现时间正常了。。。。哈哈哈哈


总结

上面问题出在jdk的new Date()方法,所以只要设置jdk所在的那个docker容器的变量就可以,不用每个都设置。jdk的new Date()方法每次调用都会去取环境变量TZ的时区,TZ是TimeZone的缩写,容器内部操作系统并未指定时区(TimeZone)信息,系统默认使用世界标准时(UTC+0),所以导致new Date()出来的数据存库会比当前时间慢8个小时;

原文地址: https://mjava.top

相关文章

  • JDK时区问题

    今天碰到一个大坑,弄了快一个小时才解决掉; 一个管理台后端服务,用docker隔离了三个容器,oracle,ngi...

  • JDK不同版本时区问题

    1、问题描述 项目中通过时区名称转换为本地时间(JDK11.0.1),与数据库(Postgresql12.3)转换...

  • Java 中的时区理解和处理

    本文内容:1,时区了解一下2,产生时区的原因3,常用时间类,哪些是有会导致时区问题4,开发中如何避免产生时区问题 ...

  • 时区问题

    //获取格林威治标准时间public void getGMTTime() {//mothed 2TimeZone ...

  • 时区问题

    2020-11-10 00:00:00 +0000 ---> GMT+0 尼林格日标准时间 也就是 0时区。 ...

  • Java中的时区转换小结

    原文 时间加减 开发跨地域的程序时,常需要进行时区转换,一个设计优良的系统,也必须考虑对多时区的支持。JDK提供了...

  • Mysql更新时区表

    时区问题 Django项目做了数据库迁移后有时候出现时区上的问题,例如django项目中设置的时区是TIME_Z...

  • Centos 7 系统时区问题

    Centos 7 系统时区问题

  • ubuntu 18 查看和修改时区

    碰到问题:在ubuntu下调用crontab调用接口时间不对,是时区不对,通过下面的步骤解决时区问题 查看时间: ...

  • NSDate 时区问题

    https://blog.csdn.net/sqc3375177/article/details/53608867

网友评论

    本文标题:JDK时区问题

    本文链接:https://www.haomeiwen.com/subject/mqpeectx.html