【问题标题】:TimeZone.getDefault() in linux differs from user to userlinux中的TimeZone.getDefault()因用户而异
【发布时间】:2013-03-22 13:06:17
【问题描述】:

我有一个配置了两个用户的 linux 机器。我也有这段Java代码:

long time = System.currentTimeMillis();
String millis = Long.toString(time);
Date date = new Date(time);
System.out.println("Current time in milliseconds = " + millis + " => " + date.toString());
TimeZone tz = TimeZone.getDefault();
System.out.println("Current time zone: " + TimeZone.getDefault().getID());

如果我在 bash 上运行 date,我对两个用户的结果相同:

用户 1:

$ date
Fri Mar 22 10:02:58 PYST 2013

用户 2:

$ date
Fri Mar 22 10:03:22 PYST 2013

但是,如果我运行相同的 java 代码:

用户 1:

$ java TimeTest
Current time in milliseconds = 1363957432669 => Fri Mar 22 10:03:52 PYST 2013
Current time zone: America/Asuncion

用户 2:

$ java TimeTest
Current time in milliseconds = 1363957456954 => Fri Mar 22 13:04:16 GMT 2013
Current time zone: GMT

所以我想这与为每个用户配置 java 的方式有关。

我检查了 TZ 定义的环境变量,但没有为任何用户定义没有 TZ

关于为什么我在同一个 Linux 机器上为不同用户获得不同的 TimeZone.getDefault() 值有什么想法吗?

JVM:

$ java -version
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)

发行版:

$ cat /etc/issue
Red Hat Enterprise Linux Server release 5.8 (Tikanga)

【问题讨论】:

  • 哪个 JVM/发行版?似乎与stackoverflow.com/questions/6392/java-time-zone-is-messed-up 有关
  • 很有趣,但是对于这个用户来说肯定有不同的配置,你可以看到一个是 PYST,另一个是 GMT。如您所知,java 从操作系统获取此信息,因此此问题的原因是这 2 个用户的配置不同。这与某些 Linux 配置有关,比 java 或可能更好。两个用户是否使用相同的 JDK 安装?你能检查一下吗?
  • 用 JVM+DISTRO 更新了问题。
  • @MarcosMaia 嗨马科斯。是的,它们都使用完全相同的 JVM。

标签: java linux timezone


【解决方案1】:

这可能与用户的区域设置有关。

检查这些变量: http://linux.die.net/man/1/locale

【讨论】:

  • 谢谢。您的回答看起来很有希望,因为我没有检查语言环境设置。现在我做到了,显然它们对两个用户来说都是一样的。
【解决方案2】:

两台机器的类似问题/解决方案:

  • 两台linux机器设置为UTC
  • 一个 JVM 报告不正确的时区(例如 CET
  • 另一个报告正确UTC

问题可能是:

  • 故障机器有这个符号链接:/etc/localtime -> /usr/share/zoneinfo/Europe/Paris
  • /usr/share/zoneinfo/Europe/Paris 包含UTC 信息

造成这种情况的原因可能是一个简单的cp /usr/share/zoneinfo/UTC /etc/localtime 替换了/usr/share/zoneinfo/Europe/Paris 的内容,而不是覆盖/etc/localtime,这是一个符号链接而不是一个文件!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2013-05-11
    • 2013-06-02
    • 2019-10-06
    • 2020-08-11
    • 2013-05-07
    • 1970-01-01
    相关资源
    最近更新 更多