SimpleDateFormat 解析帶有'Z' 文字的日期
嘗試使用SimpleDateFormat 解析ISO 8601 格式的日期時,可能無法正確處理日期“Z”文字,表示UTC 作為首選參考點。例如,使用模式“yyyy-MM-dd'T'HH:mm:ss”解析字串“2010-04-05T17:16:00Z”將導致本地時間不正確。
傳統模式「yyyy-MM-dd'T'HH:mm:ssz」和「yyyy-MM-dd'T'HH:mm:ssZ」也不足以解析有「Z」文字的日期。這種行為可能看起來違反直覺,因為「Z」文字明確指示 UTC。
解決方案
在 Java 7 之前,使用「Z」文字解析日期需要明確設定SimpleDateFormat 物件上的 TimeZone。但是,在 Java 7 及更高版本中,可以利用模式「yyyy-MM-dd'T'HH:mm:ssX」來正確解析並套用 UTC 時區後綴。
例如:
<code class="java">SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX"); Date date = sdf.parse("2010-04-05T17:16:00Z");</code>
這會將日期正確解析為 UTC 時間。
替代方案
另一種替代方案是使用Java 8 中引入的java.time 包,它提供了更現代、更全面的日期和時間API 。以下程式碼示範了使用 java.time 解析日期:
<code class="java">import java.time.Instant; import java.time.ZonedDateTime; String dateString = "2010-04-05T17:16:00Z"; Instant instant = Instant.parse(dateString); ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("Z"));</code>
這種方法消除了對複雜模式或顯式時區設定的需要,因為 java.time 本機處理 UTC 時區。
以上是如何使用 SimpleDateFormat 在 Java 中正確解析帶有「Z」文字的日期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!