解析日期时,我的代码中不断出现异常错误。
日期看起来像这样:
Wed May 21 00:00:00 EDT 2008
这是尝试读取它的代码:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy");
Property property = new Property();
property.setSale_date(LocalDateTime.parse(linesplit[8], formatter));
预期结果:ALocalDateTime
of 2008-05-21T00:00
.
我得到的是:
线程“main”中的异常 java.time.format.DateTimeParseException:
无法在索引 0 处解析文本“Wed May 21 00:00:00 EDT 2008”
我这样做完全错误吗?
魔鬼在于细节。您基本上做得正确,除了:
- 您需要为格式化程序提供区域设置。
- 通过解析成
LocalDateTime
您正在丢失信息,并且可能会得到意想不到的结果。
所以我建议:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
"EEE MMM dd HH:mm:ss zzz yyyy", Locale.ROOT);
String linesplit8 = "Wed May 21 00:00:00 EDT 2008";
ZonedDateTime zdt = ZonedDateTime.parse(linesplit8, formatter);
System.out.println(zdt);
输出是:
2008-05-21T00:00-04:00[美国/纽约]
你的字符串是英文的。看起来像是来自的输出Date.toString()
(Date
是 Java 8 之前使用的老式类)。所以它可能是英文的,因为toString
方法总是产生英文输出。因此,如果您的语言环境不是英语,则解析将被视为失败,我相信这就是它失败的原因。在这种情况下,适合使用Locale.ROOT
对于语言环境中立的英语语言环境。一种说法是“不要在此处应用任何特定于区域设置的处理”。
您的字符串包含时区缩写 EDT,它是标识唯一时间点的一部分,因此您也需要获取这部分信息。因此使用一个ZonedDateTime
.
Links
有一些相关/相似的问题,例如:
- 如何解析 new Date().toString() 的输出 https://stackoverflow.com/questions/4713825/how-to-parse-output-of-new-date-tostring
- java DateTimeFormatterBuilder 在测试时失败 https://stackoverflow.com/questions/50526234/java-datetimeformatterbuilder-fails-on-testtime
- 如何使用 dd MMM yyyy 的日期格式,如 2020 年 4 月 1 日 [重复] https://stackoverflow.com/questions/61884114/how-do-i-date-format-for-dd-mmm-yyyy-as-in-01-apr-2020
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)