【问题标题】:Java8 DateFormatter for pattern "Dec 01, 2019 1:00:00 PM +00:00"模式“2019 年 12 月 1 日 1:00:00 PM +00:00”的 Java 8 日期格式
【发布时间】:2023-01-13 01:49:04
【问题描述】:

我正在尝试格式化字符串日期、时间和区域信息。

LocalDateTime.parse("Dec 01, 2019 1:00:00 PM +00:00", DateTimeFormatter.ofPattern("MMM dd, YYYY hh:mm:ss a XXX"));
ZonedDateTime.parse("Dec 01, 2019 1:00:00 PM +00:00", DateTimeFormatter.ofPattern("MMM dd, YYYY hh:mm:ss a XXX"));

请注意,出于项目支持的原因,我不能在 Java 8 以上使用。

我无法完成这个解析工作,在我发帖之前我确实尝试了很多版本.任何支持表示赞赏。

例外:

Exception in thread "main" java.time.format.DateTimeParseException: Text 'Dec 01, 2019 1:00:00 PM +00:00' could not be parsed at index 13
    at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2052)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1954)
    at java.base/java.time.LocalDateTime.parse(LocalDateTime.java:494)
    at com.parse.Test.main(Test.java:10)

【问题讨论】:

  • 时代年与基于周的年

标签: date java-8 datetime-format localdate datetimeformatter


【解决方案1】:

这有效

LocalDateTime.parse("Dec 01, 2019 1:00:00 PM +00:00", DateTimeFormatter.ofPattern("MMM dd, yyyy h:mm:ss a XXX"));
ZonedDateTime.parse("Dec 01, 2019 1:00:00 PM +00:00", DateTimeFormatter.ofPattern("MMM dd, yyyy h:mm:ss a XXX"));

我改变的是:

  • 我们使用小写字母 yyyy 作为年份。格式模式字符串区分大小写。
  • 我们只使用一个h来表示一天中的小时,因为它可能只是一位数字(在我的示例中为1)。不过,单个 h 也接受两位数,因此使用 101112 不会造成任何问题。

【讨论】:

  • 您问题中的代码有什么区别?
  • 两个进一步的建议:(1) 更喜欢解析成 OffsetDateTime 而不是 LocalDateimeZonedDateTime。您的字符串包含与 UTC 的偏移量 +00:00,而不是像 Etc/UTCAsia/Kolkata 这样的时区。 (2) 提供语言环境。如果 DecPM 是英语,请提供英语语言环境。没有它,如果有一天您的代码在默认语言环境为非英语的计算机上运行,​​它就会崩溃。使用例如DateTimeFormatter.ofPattern("MMM dd, yyyy h:mm:ss a XXX", Locale.ENGLISH)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
  • 2013-05-31
  • 2012-02-19
  • 2015-02-03
  • 1970-01-01
  • 2019-10-07
  • 1970-01-01
相关资源
最近更新 更多