【问题标题】:Date formatting parse error Java日期格式解析错误 Java
【发布时间】:2017-09-10 20:48:01
【问题描述】:

我想将日期从Sun Apr 10 07:05:45 MDT 2017 格式化为2017-04-10T07:05:45.24Z

我正在使用以下内容:

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

日期采用上述格式。
但我在索引 3 处遇到解析错误

【问题讨论】:

  • 尽可能避免这种麻烦的格式。避免使用 3-4 个字母的伪时区缩写,例如 MDTESTIST,因为它们不是真正的时区,不是标准化的,甚至不是唯一的 (!)。以continent/region 的格式指定proper time zone name,例如America/MontrealAfrica/CasablancaAmerica/Denver

标签: java date parsing format


【解决方案1】:

什么是“L”?试试“MMM”作为月份缩写:

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

【讨论】:

  • 来自 DateTimeFormatter 文档:M/L 月份数字/文本 7; 07;七月;七月; Ĵ。但我尝试了 MMM 并仍然收到解析错误
【解决方案2】:

存在多个问题。正确的模式是"EEE MMM dd HH:mm:ss z uuuu"

  • 需要使用 M 而不是 L - 我目前正在调查原因。见DateTimeFormatter month pattern letter "L" fails。如果您执行 .format("LLL") 它返回 4,如第 4 个月。
  • 需要使用空格而不是 -
  • s、z 和 uuuu 之间需要空格
  • 需要使用 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[美国/丹佛]

【讨论】:

  • 好的,这是我更改的内容:新日期为Fri Apr 07 08:21:19 MDT 2017,并将格式化程序调整为"EEE MM dd HH:mm:ss z uuuu"
  • 另一个提示:始终指定Locale。用于确定 (a) 翻译日期名称、月份名称等的人类语言,以及 (b) 决定缩写、大写、标点、分隔符等问题的文化规范。
猜你喜欢
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 2018-03-20
  • 1970-01-01
  • 2011-11-05
相关资源
最近更新 更多