2017-04-14 143 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)用于确定缩写,大写,标点符号,分隔符等问题的文化规范。 –