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);
    }

}


  发现结果为: 

docker alpine时区 docker logs 时间_System

  结果显示java程序输出的是洛杉矶时区的时间,说明java并没有直接从docker容器中获取时间。这种情况有两种解决方案:一 、使用TZ环境变量,然后再运行Java程序

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

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

docker alpine时区 docker logs 时间_System_02

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

docker alpine时区 docker logs 时间_Java_03