2017-04-14 97 views
1

我想將日期格式從Sun Apr 10 07:05:45 MDT 2017格式化爲2017-04-10T07:05:45.24Z日期格式解析錯誤Java

我使用了以下內容:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE-LLL-dd H:mm:sszuuuu"); 
formatter.parse(date); 

日期是在上面給出的格式。
但我得到索引3的解析錯誤

+0

儘量避免在第一位置,如果在這樣的麻煩的格式所有可能的。避免使用3-4字母的僞時區縮寫,例如「MDT」或「EST」或「IST」,因爲它們*不是真正的時區,不是標準化的,甚至不是唯一的(!)。以「大陸/地區」格式指定[適當時區名稱](https://en.wikipedia.org/wiki/List_of_tz_zones_by_name),例如['America/Montreal'](https://en.wikipedia .org/wiki/America/Montreal),['Africa/Casablanca'](https://en.wikipedia.org/wiki/Africa/Cas​​ablanca)或'America/Denver'。 –

回答

0

什麼是「L」?嘗試月份縮寫「MMM」:

DateTimeFormatter formatter = DateTimeFormatter 
    .ofPattern("EEE-MMM-dd H:mm:sszuuuu"); 
+0

從DateTimeFormatter文檔:M/L月份數/文本7; 07; 7月;七月; J。但我嘗試MMM,仍然得到解析錯誤 – Vic

1

存在多個問題。正確的模式是"EEE MMM dd HH:mm:ss z uuuu"

  • 需要使用M而不是L - 我正在調查爲什麼此刻。見DateTimeFormatter month pattern letter "L" fails。如果你做一個.format(「LLL」),它將返回4,如第4個月。
  • 需要用空格代替 -
  • 需要s和z之間的空間和ùúûü
  • 需要使用HH不是H
  • 4月10日是星期一,而不是星期日

見本示例code run live at IdeOne.com

String input = "Mon Apr 10 07:05:45 MDT 2017" ; 
DateTimeFormatter f = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z uuuu" , Locale.US); 
ZonedDateTime zdt = ZonedDateTime.parse(input , f); 

zdt.toString():2017-04-10T07:05:45-06:00 [美國/丹佛]

+0

好的,這裏是我改變了:新日期是'Fri Apr 07 08:21:19 MDT 2017'並調整格式化爲'「EEE MM dd HH:mm:ss z uuuu「' – Vic

+0

還有一個提示:總是指定一個'Locale'。用於確定(a)用於翻譯日期名稱,月份名稱等的人類語言,以及(b)用於確定縮寫,大寫,標點符號,分隔符等問題的文化規範。 –