我正在尝试解析日期,当我在本地运行代码/ 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,这可能已经过时了。我会尝试升级
答案 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"));
也许这会带来一些帮助您解决这个问题的差异。