SimpleDateFormat给出不一致的结果

时间:2010-03-31 06:53:26

标签: java timezone date-format

我正在尝试解析日期,当我在本地运行代码/ BST与Paris / 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.任何想法?

答案:

好像我正在测试边缘情况:我的mac上的时区定义与linux服务器相比有所不同。如果我将时区更改为:“America / Los_Angeles”,我会得到一致的结果。 linux框给我错误的结果是运行java 1.6.0-b105,这可能已经过时了。我会尝试升级

2 个答案:

答案 0 :(得分:2)

有趣。根据{{​​1}}文档:

  

三个字母的时区ID For   一些与JDK 1.1.x的兼容性   其他三个字母的时区ID(如   如“PST”,“CTT”,“AST”)也是   支持的。但是,它们的用途是   因为相同而弃用了   缩写经常用于   多个时区(例如,   “CST”可能是美国的“中央标准”   时间“和”中国标准时间“),和   那么Java平台就可以了   认识其中一个。

如果你使用“澳大利亚/墨尔本”代替“AET”,看到结果会很有趣,但仅仅通过我做过的快速实验,它似乎没有什么区别。

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

答案 1 :(得分:1)

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

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

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