gpt4 book ai didi

java - Hotspot JVM 如何准确确定 Linux(Centos)上的当前时区?

转载 作者:IT王子 更新时间:2023-10-29 00:34:53 31 4
gpt4 key购买 nike

当在 Docker 容器(主机和容器都是 Cent OS 6.5)内运行的 JVM 实例中无法正确确定当前时区时,我遇到了问题。

首先,我通过 -v/etc/localtime:/etc/localtime:roetc/localtime 映射到子容器(我认为它是 prevalent way )

当我在主机和容器上通过 SSH 登录时

date -u

打印2015 年 4 月 20 日星期一 11:48:57 UTC

date

打印2015 年 4 月 20 日星期一 14:50:41 MSK

然而在 JVM 中

System.out.println(new Date());

我在容器中得到 Mon Apr 20 11:52:24 UTC 2015 并在主机中得到 Mon Apr 20 14:53:17 MSK 2015

当前时区是如何准确确定的?

Oracle FAQ 没有说明,我不太明白 Java 使用什么指标来获取当前用户的时区

Do my operating system's timezone patches fix the Java platform'stimezone data?

No. The Java SE platform's timezone data is not readfrom the local or host operating system. The Java SE platformmaintains a private repository of timezone data in locally installedfiles ( .../jre/lib/zi) as part of the Java Runtime Environment (JRE)software. Applying whatever operating system timezone patches (forexample Solaris OS, Linux, Windows) will have no effect on theaccuracy of the Java SE platform's timezone data.

更新:如果有人对解决方法感兴趣 - 我已经按照 Stephen 的回答指定了 TZ 环境变量,所以现在容器是用参数创建的

-v /etc/localtime:/etc/localtime:ro -e "TZ=Europe/Moscow"

最佳答案

根据 this page ,在 Linux 上运行的 JVM 使用 TZ 环境变量为其指定本地时区的名称。

该页面继续解释 TZ 通常设置在“/etc/profile”中,如果使用不“源”该文件的机制启动 Java,它就不起作用。


Oracle 常见问题解答所指的时区数据有所不同。它是 JVM 用来从时区名称映射到相应时区偏移量的数据(考虑到夏令时调整等)。

关于java - Hotspot JVM 如何准确确定 Linux(Centos)上的当前时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29747328/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com