ISO 8601 是標準的日期時間表示法 [1],在一些有遵守標準的網站上,很容易看到這種以表示法表示的時間。
在 Java 裡,有一些不算困難的方法,可以把 ISO-8601 表示法的文字轉成對應的 Epoch Time
然後當然因為有了 Epoch Time,就可以進一步轉成 Calendar 或者 Date 等其他日期相關的類別。
DateTimeFormatter datetimeFormatter = new DateTimeFormatterBuilder()
.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ"))
.toFormatter();
try {
// Try to parse the given date time string.
Instant instant = Instant.from(datetimeFormatter.parse("2016-05-31T03:45:58.251Z"));
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(instant.toEpochMilli());
} catch (DateTimeParseException e) {
e.printStackTrace();
}
如果想要驗證結果的話,可以簡單地用像是 JUnit 的方式去確認。
// Set the time zone to GMT.
cal.setTimeZone(TimeZone.getTimeZone("1200"));
Assert.assertEquals(2016, cal.get(Calendar.YEAR));
Assert.assertEquals(4, cal.get(Calendar.MONTH));
Assert.assertEquals(31, cal.get(Calendar.DAY_OF_MONTH));
Assert.assertEquals(3, cal.get(Calendar.HOUR_OF_DAY));
Assert.assertEquals(45, cal.get(Calendar.MINUTE));
Assert.assertEquals(58, cal.get(Calendar.SECOND));
不過在檢驗之前,因為 Calendar 很方便地會自動做本地化(加上本地的 Locale)所以必須先指定 Calendar 使用格林威治的時區(+0),檢驗才會正確。
參考資料:
沒有留言:
張貼留言