2016-05-06 78 views
3

我正在使用ZonedDateTime解析並根據時區獲取當前時間。ZonedDateTime解析成功,但輸出字符串不同

當我解析以下String時,解析成功,但輸出String是不同的。這是爲什麼?

String dateTimeString = "2016-05-04T12:58:22+01:00[Europe/Paris]"; 
ZonedDateTime dateTime = ZonedDateTime.parse(dateTimeString, ISO_ZONED_DATE_TIME); 
System.out.println(dateTimeString); 
System.out.println(dateTime.toString()); 

輸出

2016-05-04T12:58:22+01:00[Europe/Paris] 
2016-05-04T12:58:22+02:00[Europe/Paris] 

在沒有它決定什麼時候改變+1+2,爲什麼沒有異常拋出?

據我所知,括號內的參數[Europe/Paris]是可選的,但在這裏它優先於偏移量。

在另一方面,下面的代碼

String dateTimeString = "2016-05-04T12:58:22+01:00"; 
ZonedDateTime dateTime = ZonedDateTime.parse(dateTimeString, ISO_ZONED_DATE_TIME); 
System.out.println(dateTimeString); 
System.out.println(dateTime.toString()); 

產生輸出

2016-05-04T12:58:22+01:00 
2016-05-04T12:58:22+01:00 

回答

6

的問題是,2016-05-04T12:58:22+01:00[Europe/Paris]是不是一個正確的時間,因爲我們有CEST(歐洲中部夏令時間,夏令節省時間)在三月的最後一個星期日開始。與UTC相比,它是+ 2小時。所以確實2016-05-04T12:58:22+02:00[Europe/Paris]是正確的。

正如你所說,[Europe/Paris]似乎採取優先。不確定在規範方面是否應該有一個例外,但我對此表示懷疑。

換句話說,2016-05-04T12:58:22+01:00不能在時區Europe/Paris

+0

感謝您的回覆。我知道這是一個錯誤的日期,爲什麼它解析成功?這是一個設計缺陷。 – Olayinka

+2

我猜想規範中有一個確定的優先級。但我沒有檢查。 – spa