java-SimpleDateFormat给出不一致的结果
作者:互联网
我试图解析一个日期,当我在本地/ 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.
回答:
好像我在测试一个极端的情况:Mac上的时区定义与Linux服务器上的不同.如果我将时区更改为:“ America / Los_Angeles”,我将获得一致的结果.给我错误结果的linux框正在运行java 1.6.0-b105,它可能已过时.我会尝试升级
解决方法:
有趣.根据TimeZone文档:
Three-letter time zone IDs For
compatibility with JDK 1.1.x, some
other three-letter time zone IDs (such
as “PST”, “CTT”, “AST”) are also
supported. However, their use is
deprecated because the same
abbreviation is often used for
multiple time zones (for example,
“CST” could be U.S. “Central Standard
Time” and “China Standard Time”), and
the Java platform can then only
recognize one of them.
如果使用“ Australia / Melbourne”而不是“ AET”,则看到结果会很有趣,但是从我所做的一个快速实验来看,似乎没有什么不同.
奇怪的是,结果相隔一个小时,就像其中一种情况没有考虑夏令时.愚蠢的问题;如果您在两台不同的计算机上运行,是否确定每台计算机的时间设置正确?
标签:timezone,date-format,java 来源: https://codeday.me/bug/20191210/2099680.html