已經有很多的答案,但只是想更新與java 8。
一般來說,我們面臨着兩個問題,日期
- 解析字符串到日期
- 顯示日期在所需的字符串格式
DateTimeFormatter
在Java中8類可用於這兩個目的。 下面的方法試圖爲這些問題提供解決方案。
方法1: 將您UTC字符串即時。使用即時您可以通過提供時區字符串爲任何時區創建日期,並根據需要使用DateTimeFormatter
來格式化顯示日期。
String dateString = "2016-07-13T18:08:50.118Z";
String tz = "America/Mexico_City";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMM d yyyy hh:mm a");
ZoneId zoneId = ZoneId.of(tz);
Instant instant = Instant.parse(dateString);
ZonedDateTime dateTimeInTz =ZonedDateTime.ofInstant(instant, zoneId);
System.out.println(dateTimeInTz.format(dtf));
方法2:
使用DateTimeFormatter
內置常量e.g ISO_INSTANT
解析字符串LocalDate
。 ISO_INSTANT
可以解析圖案的日期
YYYY-MM-dd'T'HH:MM:SSX例如'2011-12-03T10:15:30Z'
LocalDate parsedDate
= LocalDate.parse(dateString, DateTimeFormatter.ISO_INSTANT);
DateTimeFormatter displayFormatter = DateTimeFormatter.ofPattern("yyyy MM dd");
System.out.println(parsedDate.format(displayFormatter));
方法3 :
如果你的日期字符串有時間精度差不多例如,它捕獲的秒部分,以及在這種情況下2016-07-13T18:08:50.118Z則方法1將工作但方法2不起作用。如果你嘗試解析它將會拋出DateTimeException
由於ISO_INSTANT
格式化程序將無法解析秒數的小數部分,正如你可以從它的模式中看到的那樣。 在這種情況下,您將不得不通過提供如下日期模式來創建定製DateTimeFormatter
。
LocalDate localDate
= LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX"));
你的格式有誤。 – SLaks
你期望/希望代碼實際執行什麼? – Affe
返回一個有效的Date對象。 –