![](/img/trans.png)
[英]Inconsistent behaviour of Jackson's JsonFormat for Old Date API and ZonedDateTime
[英]Old Date Formatting incompatible with Java 8 ZonedDateTime API
我將舊的日期格式代碼更新為Java 8,並嘗試使用ZonedDateTime API 。
日期的格式與Javascript日期對象格式相同,例如-
2017年5月25日星期四,格林尼治標准時間+1200(新西蘭標准時間)
我以前使用以下格式-
EEE MMM dd yyyy hh:mm:ss'GMT'Z'('zzzz')'
此格式無法使用DateTimeFormatter.ofPattern方法解析日期字符串。
這是代碼:
public static final String DATE_FORMAT = "EEE MMM dd yyyy hh:mm:ss 'GMT'Z '('zzzz')'";
public static void main(String[] args) throws ParseException {
String sDate = "Thu May 25 2017 10:00:00 GMT+1200 (New Zealand Standard Time)";
parseDate(sDate);
}
private static void parseDate(String sDate) throws ParseException {
// works
DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
Date oldDate = dateFormat.parse(sDate);
//FIXME: can't parse?!
ZonedDateTime newDate = ZonedDateTime.parse(
sDate, DateTimeFormatter.ofPattern(DATE_FORMAT)); // <- this is the line 25!
}
這是我完整的參考代碼,可以編譯和運行-https://gist.github.com/bhabanism/470e03db54981ad6ddedbba316dcaa9a
這在第25行失敗,並顯示:
線程“主”中的異常java.time.format.DateTimeParseException:無法解析文本“ 2017年5月25日星期四10:00:00 GMT + 1200(新西蘭標准時間)”:無法從TemporalAccessor獲取ZonedDateTime:{HourOfAmPm = 10,MilliOfSecond = 0,MinuteOfHour = 0,OffsetSeconds = 43200,MicroOfSecond = 0,NanoOfSecond = 0,SecondOfMinute = 0},ISO,Pacific / Auckland已解析為java.time.format.Parsed類型的2017-05-25
請注意,我無法更改日期的輸入格式,它必須是
2017年5月25日星期四,格林尼治標准時間+1200(新西蘭標准時間)
我肯定可以修改格式化程序
EEE MMM dd yyyy hh:mm:ss'GMT'Z'('zzzz')'
似乎您的格式字符串中一直有錯誤。 小寫字母hh
表示AM或PM中的小時,范圍為1到12。由於您的字符串中沒有AM / PM,我懷疑這永遠不是您想要的,而且我想知道錯誤是如何被忽略的。
大寫HH
是一天中的小時,從0到23:
public static final String DATE_FORMAT = "EEE MMM dd yyyy HH:mm:ss 'GMT'Z '('zzzz')'";
通過此更改,舊的和新的解析方式都可以在我的計算機上使用。
將Locale.ENGLISH
添加到兩個格式化程序時,就是這樣。 您可能想要做同樣的事情。
我得到的結果是
Thu May 25 00:00:00 CEST 2017
2017-05-25T10:00+12:00[Pacific/Auckland]
由於CEST比UTC早2小時,所以這是同一時間點,只是呈現方式有所不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.