java-threetenbp:使用时区名称解析日期时解析异常

java-threetenbp:使用时区名称解析日期时解析异常,第1张

概述我正在尝试以EEE,ddMMMyyyyHH:mm:sszzz的格式来解析日期,例如,使用Threeten的DateTimeFormatter之类的字符串,例如“Tue,16May201707:44:48GMT”.但是,由于某些原因,似乎无法解析时区名称(我尝试仅在没有时区名称部分的情况下解析相同的字符串,并且可以正常工作).这是代码

我正在尝试以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:使用时区名称解析日期时解析异常全部内容,希望文章能够帮你解决java-threetenbp:使用时区名称解析日期时解析异常所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1091578.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存