【问题标题】:Format string to java8 ZonedDateTime [duplicate]将字符串格式化为 java8 ZonedDateTime [重复]
【发布时间】:2019-05-03 15:14:14
【问题描述】:

我在将此字符串格式化为ZonedDateTime 对象时遇到问题。我尝试关注 oracle 文档,但失败了,我不知道应该怎么做。

String date = "Sat Dec 01 20:56:28 CET 2018"
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z uuuu");
ZonedDateTime dateTime = ZonedDateTime.parse(date, formatter);

我明白了

java.time.format.DateTimeParseException:无法在索引 0 处解析文本“Sat Dec 01 20:56:28 CET 2018”

【问题讨论】:

  • 怎么失败了???
  • java.time.format.DateTimeParseException: Text 'Sat Dec 01 20:56:28 CET 2018' 无法在索引 0 处解析
  • 顺便说一句,这是一种糟糕的格式。在可能的情况下,使用标准的ISO 8601 格式来交换日期时间值。 java.time 类在解析/生成字符串时默认使用标准格式。
  • 看起来您正在从老式 Date 对象中解析来自 toString() 的字符串?如果在您的能力范围内,请使用Date.toInstant() 转换为现代类型,因为它更容易、更安全。解析三个字母的时区缩写在CET 时可能有效,但在许多其他情况下会给出错误的结果。

标签: java date formatting


【解决方案1】:

指定Locale,以确定用于翻译月份名称等的人类语言。

String date = "Sat Dec 01 20:56:28 CET 2018";
DateTimeFormatter formatter = 
    DateTimeFormatter.ofPattern(
        "EEE MMM dd HH:mm:ss z uuuu" , 
        Locale.US 
    )
;

ZonedDateTime dateTime = ZonedDateTime.parse(date, formatter);
System.out.println(dateTime);

【讨论】:

  • 哇,没想到会是这个问题。谢谢老哥
  • 感谢 Basil 的干净编辑
猜你喜欢
  • 2017-07-14
  • 2019-04-27
  • 1970-01-01
  • 2019-05-07
  • 2018-02-07
  • 2012-08-25
  • 2018-02-02
  • 2015-01-07
  • 1970-01-01
相关资源
最近更新 更多