3

我正在尝试解析日期,当我在本地/BST 运行代码与巴黎/CEST 的服务器相比时,我得到了不同的结果。

我在以下示例中重现了该问题。这是试图解析澳大利亚大奖赛的开始日期。

    TimeZone tz = TimeZone.getTimeZone("AET");
    DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH mm");
    dateFormat.setTimeZone(tz);
    long time = dateFormat.parse("28/03/2010 17 00").getTime();
    System.out.println("Time "+time);

似乎我在日期格式上正确设置了时区,当前时区不应该影响代码。但在本地,它打印 1269756000000,在巴黎打印 1269759600000。知道吗?

回答:

似乎我正在使用边缘案例进行测试:与 linux 服务器相比,我的 mac 上的时区定义不同。如果我将时区更改为:“America/Los_Angeles”,我将得到一致的结果。给我错误结果的 linux 机器正在运行可能已过时的 java 1.6.0-b105。我会尝试升级

4

2 回答 2

2

有趣的。根据TimeZone文档:

三字母时区 ID 为了与 JDK 1.1.x 兼容,还支持其他一些三字母时区 ID(例如“PST”、“CTT”、“AST”)。但是,不推荐使用它们,因为相同的缩写通常用于多个时区(例如,“CST”可能是美国“中部标准时间”和“中国标准时间”),Java 平台只能识别其中之一他们。

如果您使用“Australia/Melbourne”而不是“AET”来查看结果会很有趣,但仅从我所做的一个快速实验来看,它似乎并没有什么不同。

奇怪的是结果相隔一个小时,例如在其中一个案例中没有考虑夏令时。愚蠢的问题; 如果您在两台不同的计算机上运行,​​您确定每台计算机的时间设置正确吗?

于 2010-03-31T07:17:28.820 回答
1

在我的系统上,结果是“1269756000000”(就像在您的本地系统上一样)。我会尝试检查巴黎的服务器,尤其是与时区有关的设置:

System.out.println(System.getProperty("user.timezone"));
System.out.println(System.getProperty("user.country"));

也许这会带来一些差异,可以帮助您解决这个问题。

于 2010-03-31T07:34:46.697 回答