簡體   English   中英

與Java 8 ZonedDateTime API不兼容的舊日期格式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM