【问题标题】:Unable to parse some dates into ZonedDateTime [duplicate]无法将某些日期解析为 ZonedDateTime [重复]
【发布时间】:2021-06-18 08:26:02
【问题描述】:

尝试解析来自第三方来源的传入日期,某些日期按预期工作,其他日期则抛出异常:

Text 'Fri, 11 Jun 2021 02:25:23 +0000' could not be parsed at index 8

查看日期我无法发现它们之间的差异,查看我的格式化程序我看不出我哪里出错了。

失败日期示例:Fri, 11 Jun 2021 02:25:23 +0000
示例通过日期:Sun, 30 May 2021 11:42:03 +0000

我用来解析日期的代码:

ZonedDateTime.parse(incomingDate, DateTimeFormatter.ofPattern("E, d MMM yyyy HH:mm:ss Z"));

我唯一能想到的是一些日期月份是速记的,而另一些则不是(例如 May vs Jun)。

希望得到一些帮助。

【问题讨论】:

  • 我已尝试在本地运行您的代码,但没有任何问题。我的输出对于您共享的两个日期都是正确的:2021-06-11T02:25:23Z2021-05-30T11:42:03Z。你能分享一下失败的地方吗?也许是错误和堆栈跟踪?
  • 两者都适合我。您的系统语言和区域是否设置为不将 June 称为“Jun”的地方?如果是这样,请将日期格式化程序的语言环境设置为 withLocale(Locale.ENGLISH)

标签: java zoneddatetime


【解决方案1】:
        String incomingDate1 = "Fri, 11 Jun 2021 02:25:23 +0000";
        String incomingDate2 = "Sun, 30 May 2021 11:42:03 +0000";

        ZonedDateTime parsed = ZonedDateTime.parse(incomingDate1,
                DateTimeFormatter.ofPattern("E, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH));

        System.out.println(parsed);

【讨论】:

  • 语言环境是缺失的部分......虽然奇怪,因为我只是在一个通用的美国语言环境中,没有什么不同。不过谢谢你
  • @ChrisTurner 尝试使用您的默认语言环境来格式化日期,看看MMM 将第 6 个月格式化为什么。
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 2016-06-26
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 2015-12-28
相关资源
最近更新 更多