gpt4 book ai didi

java - threetenbp:解析带时区名称的日期时解析异常

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:36 27 4
gpt4 key购买 nike

我正在尝试以 EEE、dd MMM yyyy HH:mm:ss zzz 格式解析日期,例如使用 threeten 的 DateTimeFormatter 的字符串,例如“Tue, 16 May 2017 07:44:48 GMT”。但是,似乎由于某种原因无法解析时区名称(我尝试在没有时区名称部分的情况下解析相同的字符串并且有效)。

下面是代码的解析部分:

DateTimeFormatter parseFormatter = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH);
ZonedDateTime parsedDate = ZonedDateTime.parse(date, parseFormatter);

我收到以下错误:

org.threeten.bp.format.DateTimeParseException: Text 'Tue, 16 May 2017 13:02:16 GMT' could not be parsed at index 26

我为时区名称部分尝试了各种不同的格式(例如 z、zzz、Z、ZZZ),但没有任何效果。同样,如果我解析一个没有时区名称部分的子字符串日期(到 LocalDateTime),那么它就可以工作,所以我确信问题出在时区名称上。有谁知道问题出在哪里?

最佳答案

我不知道为什么你的代码不起作用。当我在我的 Java 8 中使用 java.time 类时会发生这种情况。所以这只是对可能修复的猜测:

    DateTimeFormatter parseFormatter = DateTimeFormatter.RFC_1123_DATE_TIME;
ZonedDateTime parsedDate = ZonedDateTime.parse(date, parseFormatter);

您会注意到它在同一时间略有简化。

DateTimeFormatter.RFC_1123_DATE_TIME记录为

Returns the RFC-1123 date-time formatter, such as 'Tue, 3 Jun 2008 11:05:30 GMT'.

所以我认为它应该接受 GMT 作为时区名称。我应该说它适合你的日期字符串,它也适用于我的电脑。我相信无论语言环境如何,此格式化程序都使用英文缩写表示星期几和月份(或者您可以尝试 DateTimeFormatter.RFC_1123_DATE_TIME.withLocale(Locale.ENGLISH),但我真的不认为它会是必要的)。

也就是说,他们说您应该避免使用三字母和四字母时区缩写。有些是模棱两可的,有些不是完整的时区,这会导致进一步的模棱两可。虽然 GMT 不是最危险的,但解决您的问题的可靠方法是,如果您可以获得带有偏移量的日期字符串,例如 +00:00 或只是 Z,而不是三个字母的区域名称。

请参阅问题和此答案中的两个示例,running live at IdeOne.com .两者都成功了。

关于java - threetenbp:解析带时区名称的日期时解析异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44004542/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com