在java中为不同系统上的TimeZone.getDefault()。getID()获取不同的值

时间:2011-11-22 09:41:35

标签: java time timezone

我在不同系统上获得TimeZone.getDefault()。getID()的不同值。 例如,在印度标准时间的情况下, 在其中一个系统中我们得到“GMT + 5:30”: 而在另一个我们得到“亚洲/加尔各答”。 我们期望在所有机器上获得“亚洲/加尔各答”字符串。

为什么这种行为会出现不一致的情况?

有没有办法在不同的系统窗口/ MAC上获得一致的行为?

使用Java以编程方式获取客户端时区的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

听起来两台机器配置不同 - 就这么简单。例如,如果您的第一个系统是Windows,则可能取消选中“自动调整夏令时”框。

如果您知道所有系统都需要亚洲/加尔各答,请明确使用。尽管如此,我尽量避免使用默认时区。即使我使用它,我也会尝试使用它显式,以便从代码中明显看出我尝试使用系统时区,而不仅仅是是偶然的。

答案 1 :(得分:0)

如果有人在Linux上遇到同样的问题而无法找到答案:

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