Java 阿姆斯特丹时区SimpleDataFormat的行为不一致

Java 阿姆斯特丹时区SimpleDataFormat的行为不一致,java,timezone,simpledateformat,Java,Timezone,Simpledateformat,昨天,我遇到了一个问题,一个人的出生日期在使用XStream从日期编组为xml,然后再次取消编组为日期后发生了更改。以下代码再现了XStream的奇怪行为: System.setProperty("user.timezone", "Europe/Amsterdam"); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S z"); String textIn = "1933-09-17 00:00:0

昨天,我遇到了一个问题,一个人的出生日期在使用XStream从日期编组为xml,然后再次取消编组为日期后发生了更改。以下代码再现了XStream的奇怪行为:

System.setProperty("user.timezone", "Europe/Amsterdam");
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S z");
String textIn = "1933-09-17 00:00:00.0 CET";
Date date = dateFormat.parse(textIn);
String textOut = dateFormat.format(date);

System.out.println("input : " + textIn);
System.out.println("date  : " + date);
System.out.println("output: " + textOut);
结果是:

input : 1933-09-17 00:00:00.0 CET
date  : Sun Sep 17 00:19:32 CEST 1933
output: 1933-09-17 00:19:32.0 CEST
我发现这只发生在1940年以前的日期。这在某种程度上是可以解释的:在1940年的荷兰,从所谓的“阿姆斯特丹时间”(GMT+00h19m32s)改为欧洲时间(GMT+01H00MS)。我无法解释为什么时区变为节省时间(从CET到CEST)

如果我把时区改成柏林

System.setProperty("user.timezone", "Europe/Berlin");
我得到了我期望的结果:

input : 1933-09-17 00:00:00.0 CET
date  : Sun Sep 17 00:00:00 CET 1933
output: 1933-09-17 00:00:00.0 CET
我的服务器位于阿姆斯特丹。我将服务器的时区设置为Berlin,以解决此问题

我的问题是:您认为这是SimpleDataFormat中的一个bug吗?或者代码是无效的,因为“1933-09-17 00:00:00.0 CET”是位置阿姆斯特丹的无效日期

如果这是一个bug,那么应该在哪里报告?
如果日期输入本身无效,解析方法不应该抛出错误吗

看起来德国没有在1933年完成CET到CEST的过渡,而荷兰做到了:


呸,约会真让人头疼。我很想知道这个问题的答案。谢谢!此人出生在AMT时区,如果夏令时处于活动状态,则出生在NST。几年后有了NET和NEST,直到现在我们有了CET和CEST。历史从来都不简单。未来充满希望!