簡體   English   中英

SimpleDateFormat for timezone Amsterdam的行為不一致

[英]Inconsistent behaviour for SimpleDateFormat for timezone Amsterdam

昨天我遇到了一個問題,一個人的出生日期在用XStream從Date到xml編組然后再編組到Date之后發生了變化。 以下代碼再現了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年的荷蘭,從所謂的“Amsterdamse Tijd”(GMT + 00h19m32s)到歐洲時間(GMT + 01h00m00s)發生了變化。 我無法解釋為什么時區會改變節省時間(從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

我的服務器位於阿姆斯特丹。 我將服務器的時區設置為柏林,以解決問題。

我的問題是:你認為這是SimpleDateFormat中的一個錯誤嗎? 或者代碼無效,因為“1933-09-17 00:00:00.0 CET”是位置阿姆斯特丹的無效日期?

如果它是一個bug,應該在哪里和哪里報告? 如果日期輸入本身無效,那么解析方法是否應該拋出錯誤?

看起來德國沒有在1933年進行CET到CEST的過渡,而荷蘭做了:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM