linux中的TimeZone.getDefault()因用户而异

时间:2013-03-22 13:06:17

标签: java linux timezone

我有一个配置了两个用户的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)

2 个答案:

答案 0 :(得分:1)

这可能与用户的Locale有关。

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

答案 1 :(得分:0)

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

  • 两台Linux机器设置为UTC
  • 一个JVM报告错误的时区(ex 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这是一个符号链接而不是文件!