zoukankan      html  css  js  c++  java
  • docker容器修改时区(java应用log信息与标准容器时间有八个小时时间差)

      在docker容器中运行的java应用打出的日志时间和通过date -R方式获取的容器标准时间有八个小时时间差~

      因为docker容器的原生时区为0时区,为了和国内时区保持一致,需要把容器时区调为东八区,方法非常简单,在/usr/share/zoneinfo目录下面有大量的时区文件,涵盖各个时区,根据自己的需求直接把对应的文件拷贝到/etc目录下,重命名为localtime文件即可。

      

      随后发现一个问题,虽然docker容器的时区已经修改为东八区了,但是容器中的java应用打出的log日志时间仍然和上海时间有很大的时间差,因此,写了一段代码来测试

    import java.sql.Timestamp;
    import java.util.TimeZone;
    
    public class test {
    
        public static void main(String [] args){
            TimeZone tz = TimeZone.getDefault();
            System.out.println("tz: " + tz);
            Timestamp curTime = new Timestamp(System.currentTimeMillis());
            System.out.println("时间: " + curTime);
        }
    
    }

      发现结果为:

     

      结果显示java程序输出的是洛杉矶时区的时间,说明java并没有直接从docker容器中获取时间。这种情况有两种解决方案:

    一 、使用TZ环境变量,然后再运行Java程序

      export TZ=Asia/Shanghai(写到/etc/profile文件中然后重启系统生效)

      再运行java测试程序,结果变为

     

    二、使用 -Duser.timezone=GMT+08 作为Java虚拟机的系统参数

     

  • 相关阅读:
    三数之和
    167
    二分搜索树
    687
    索引堆
    二分查找 leetcode704
    leetcode 56合并区间 java
    leetcode 1046
    堆的数据结构java
    leetcode 493
  • 原文地址:https://www.cnblogs.com/z-belief/p/6484171.html
Copyright © 2011-2022 走看看