【问题标题】:Parse datetime with offset string to LocalDateTime将带有偏移字符串的日期时间解析为 LocalDateTime
【发布时间】:2021-11-28 22:53:20
【问题描述】:

我正在尝试将以下日期时间字符串解析为 LocalDateTimeObject,但是我无法识别日期时间字符串的格式。

Sat, 09 Oct 2021 02:10:23 -0400

    String s = "Sat, 09 Oct 2021 02:10:23 -0400";
    DateTimeFormatter formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
    LocalDateTime dateTime = LocalDateTime.parse(s, formatter);
    System.out.println(dateTime);

我应该如何确定上述字符串的模式?

【问题讨论】:

  • 您的字符串包含偏移量,因此使用LocalDateTime 不是正确的工具。在任何情况下,您的字符串都不符合 ISO-8601 格式,因此您不应尝试使用 ISO_OFFSET_DATE_TIME 格式。

标签: java json date java-time


【解决方案1】:

您应该首先检查日期字符串是否与Predefined Formatters 中的任何一个匹配。

如果没有,那么您必须使用.ofPattern(String pattern).ofPattern(String pattern, Locale locale) 创建自己的Formatter。为此,您可以在 Patterns for Formatting and Parsing 部分查看所有已定义的模式字母 here

对于您的示例,您可以使用 DateTimeFormatter.RFC_1123_DATE_TIME:

DateTimeFormatter formatter = DateTimeFormatter.RFC_1123_DATE_TIME;
OffsetDateTime dateTime = OffsetDateTime.parse(s, formatted);

或:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss Z");
OffsetDateTime dateTime = OffsetDateTime.parse(s, formatted);

请注意,OffsetDateTime 用于表示与 UTC 有偏移的日期时间。


 Symbol  Meaning       
 ------  -------        
   E     day-of-week 
   d     day-of-month
   M     month-of-year
   y     year-of-era
   H     hour-of-day (0-23)
   m     minute-of-hour
   s     second-of-minute
   Z     zone-offset

【讨论】:

  • 如何在模式中表示时区,如果我理解正确,日期字符串中的“-0400”代表 GMT -4,从返回的 API 文档中也可以看出日期提到“重要:所有新闻显示的时区是东部时区(GMT -0400)。”
  • 我已经编辑了我的答案。
猜你喜欢
  • 2020-08-15
  • 2017-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
  • 2010-12-15
  • 1970-01-01
相关资源
最近更新 更多