我正在尝试以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:使用时区名称解析日期时解析异常所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)