我在不同的系统上获得不同的TimeZone.getDefault((.getID((值。例如在印度标准时间的情况下,在其中一个系统上,我们得到"GMT+5:30":而在另一个节目中,我们将看到"亚洲/加尔各答"。我们希望在所有机器上都能得到"亚洲/加尔各答"字符串。
为什么这种行为前后矛盾?
有什么方法可以在不同的系统窗口/MAC之间获得一致的行为吗?
使用Java以编程方式获取客户端时区的最佳方式是什么?
听起来这两台机器的配置不同——就这么简单。例如,如果您的第一个系统是Windows,则可能已取消勾选"自动调整夏令时"框。
如果你知道所有系统都需要亚洲/加尔各答,那么就明确使用它。老实说,我尽量避免使用默认时区。即使我使用它,我也会尝试显式地使用它,这样从代码中可以明显看出,我正在尝试来使用系统时区,而不仅仅是偶然的。
如果有人在Linux上遇到同样的问题,却找不到答案:
- 两台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
,后者是符号链接而不是文件!