Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java linux中的TimeZone.getDefault()因用户而异_Java_Linux_Timezone - Fatal编程技术网

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

Java linux中的TimeZone.getDefault()因用户而异,java,linux,timezone,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 = Time

我有一个配置了两个用户的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
$ java TimeTest
Current time in milliseconds = 1363957432669 => Fri Mar 22 10:03:52 PYST 2013
Current time zone: America/Asuncion
用户2:

$ date
Fri Mar 22 10:03:22 PYST 2013
$ java TimeTest
Current time in milliseconds = 1363957456954 => Fri Mar 22 13:04:16 GMT 2013
Current time zone: GMT
但是,如果运行相同的java代码,则:

用户1:

$ date
Fri Mar 22 10:02:58 PYST 2013
$ java TimeTest
Current time in milliseconds = 1363957432669 => Fri Mar 22 10:03:52 PYST 2013
Current time zone: America/Asuncion
用户2:

$ date
Fri Mar 22 10:03:22 PYST 2013
$ 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:

发行版:

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

这可能与用户的语言环境有关

检查以下变量:
两台机器的类似问题/解决方案:

  • 两台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
,后者是一个符号链接而不是一个文件

哪个JVM/发行版?似乎与有趣相关,但确实有一个不同的用户配置,如您所见,一个是PYST,另一个是GMT。正如您所知,java从O.s获得了此信息,因此此问题的原因是这两个用户的配置不同。这与某些Linux配置有关,可能比java或其他配置更好。两个用户是否使用相同的JDK安装?你能检查一下吗?用JVM+发行版更新了这个问题。@MarcosMaia嗨Marcos。是的,它们都使用完全相同的JVM。谢谢。你的答案看起来很有希望,因为我没有检查区域设置。现在我做到了,很明显,这两个用户都是一样的。