日期时间解析异常
DateTimeParse Exception
在解析日期时,我的代码中经常出现异常错误。
日期看起来像这样:
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));
预期结果:LocalDateTime
个 2008-05-21T00:00
。
我得到的是:
Exception in thread "main" java.time.format.DateTimeParseException:
Text 'Wed May 21 00:00:00 EDT 2008' could not be parsed at index 0
我这样做完全错了吗?
细节决定成败。你基本上做对了,除了:
- 您需要为格式化程序提供语言环境。
- 通过解析为
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[America/New_York]
您的字符串是英文的。它看起来像 Date.toString()
的输出(Date
是 Java 8 之前使用的老式 class。所以它可能是英文的,因为 toString
方法总是产生英文输出。因此,如果您的语言环境不是英语语言环境,则解析将被视为失败,我相信这就是失败的原因。在这种情况下,将 Locale.ROOT
用于语言环境中性的英语语言环境是合适的。一种表达“不要在此处应用任何区域设置特定处理”的方式。
您的字符串包含时区缩写 EDT,这是标识唯一时间点的一部分,因此您也需要获取这部分信息。因此使用 ZonedDateTime
.
链接
有一些related/similar问题,例如:
- how to parse output of new Date().toString()
- java DateTimeFormatterBuilder fails on testtime
- How do I Date format for dd MMM yyyy, as in 01 Apr 2020 [duplicate]
在解析日期时,我的代码中经常出现异常错误。 日期看起来像这样:
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));
预期结果:LocalDateTime
个 2008-05-21T00:00
。
我得到的是:
Exception in thread "main" java.time.format.DateTimeParseException: Text 'Wed May 21 00:00:00 EDT 2008' could not be parsed at index 0
我这样做完全错了吗?
细节决定成败。你基本上做对了,除了:
- 您需要为格式化程序提供语言环境。
- 通过解析为
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[America/New_York]
您的字符串是英文的。它看起来像 Date.toString()
的输出(Date
是 Java 8 之前使用的老式 class。所以它可能是英文的,因为 toString
方法总是产生英文输出。因此,如果您的语言环境不是英语语言环境,则解析将被视为失败,我相信这就是失败的原因。在这种情况下,将 Locale.ROOT
用于语言环境中性的英语语言环境是合适的。一种表达“不要在此处应用任何区域设置特定处理”的方式。
您的字符串包含时区缩写 EDT,这是标识唯一时间点的一部分,因此您也需要获取这部分信息。因此使用 ZonedDateTime
.
链接
有一些related/similar问题,例如:
- how to parse output of new Date().toString()
- java DateTimeFormatterBuilder fails on testtime
- How do I Date format for dd MMM yyyy, as in 01 Apr 2020 [duplicate]