[英]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,應該在哪里和哪里報告? 如果日期輸入本身無效,那么解析方法是否應該拋出錯誤?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.