Java8 LocalDateTime 解析错误
Java8 LocalDateTime parsing error
我正在尝试使用 java.time
解析以下时间戳字符串 03-feb-2014 13:16:31
,但它抛出了错误。这是我的代码。
String timestamp = "03-feb-2014 13:16:31";
DateTimeFormatter format;
DateTimeFormatterBuilder formatBuilder = new DateTimeFormatterBuilder();
formatBuilder.parseCaseInsensitive();
formatBuilder.append(DateTimeFormatter.ofPattern("dd-MMM-YYYY HH:mm:ss"));
format = formatBuilder.toFormatter();
LocalDateTime localdatetime = LocalDateTime.parse(timestamp, format);
但是我收到以下错误。
Exception in thread "main" java.time.format.DateTimeParseException: Text '03-feb-2014 13:16:31' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {DayOfMonth=3, MonthOfYear=2, WeekBasedYear[WeekFields[SUNDAY,1]]=2014},ISO resolved to 13:16:31 of type java.time.format.Parsed
at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1920)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1855)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
at com.target.util.CntrlmProcessor.main(CntrlmProcessor.java:24)
Caused by: java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: {DayOfMonth=3, MonthOfYear=2, WeekBasedYear[WeekFields[SUNDAY,1]]=2014},ISO resolved to 13:16:31 of type java.time.format.Parsed
at java.time.LocalDateTime.from(LocalDateTime.java:461)
at java.time.format.Parsed.query(Parsed.java:226)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
从错误来看,库似乎已经能够解析字符串,因为它从时间戳中分离出了所有字段,但我似乎遗漏了一些东西。
我尝试只解析时间戳的时间部分,效果很好。
如果您在模式中使用 yyyy
而不是 YYYY
,则您提供的代码有效。 YYYY
是 "week-based year",通常仅在您还指定周数和星期几(例如 YYYY-ww-EEE
的模式)时才使用。这是非常罕见的。
请注意,即使只有 "year" 也有 yyyy
和 uuuu
- yyyy
是 "year of era"(它始终为非负数 - 并且始终为正数公历),而 uuuu
是一种 "eraless year" - 例如,5BCE 是 -4 作为无纪元年。如果您不需要处理共同时代之前的日期(或其他日历系统中的日期),您可能不需要担心这一点。
我还建议将您的代码重写为:
DateTimeFormatter format = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("dd-MMM-yyyy HH:mm:ss")
.toFormatter();
...只是为了简单起见。
我正在尝试使用 java.time
解析以下时间戳字符串 03-feb-2014 13:16:31
,但它抛出了错误。这是我的代码。
String timestamp = "03-feb-2014 13:16:31";
DateTimeFormatter format;
DateTimeFormatterBuilder formatBuilder = new DateTimeFormatterBuilder();
formatBuilder.parseCaseInsensitive();
formatBuilder.append(DateTimeFormatter.ofPattern("dd-MMM-YYYY HH:mm:ss"));
format = formatBuilder.toFormatter();
LocalDateTime localdatetime = LocalDateTime.parse(timestamp, format);
但是我收到以下错误。
Exception in thread "main" java.time.format.DateTimeParseException: Text '03-feb-2014 13:16:31' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {DayOfMonth=3, MonthOfYear=2, WeekBasedYear[WeekFields[SUNDAY,1]]=2014},ISO resolved to 13:16:31 of type java.time.format.Parsed
at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1920)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1855)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
at com.target.util.CntrlmProcessor.main(CntrlmProcessor.java:24)
Caused by: java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: {DayOfMonth=3, MonthOfYear=2, WeekBasedYear[WeekFields[SUNDAY,1]]=2014},ISO resolved to 13:16:31 of type java.time.format.Parsed
at java.time.LocalDateTime.from(LocalDateTime.java:461)
at java.time.format.Parsed.query(Parsed.java:226)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
从错误来看,库似乎已经能够解析字符串,因为它从时间戳中分离出了所有字段,但我似乎遗漏了一些东西。
我尝试只解析时间戳的时间部分,效果很好。
如果您在模式中使用 yyyy
而不是 YYYY
,则您提供的代码有效。 YYYY
是 "week-based year",通常仅在您还指定周数和星期几(例如 YYYY-ww-EEE
的模式)时才使用。这是非常罕见的。
请注意,即使只有 "year" 也有 yyyy
和 uuuu
- yyyy
是 "year of era"(它始终为非负数 - 并且始终为正数公历),而 uuuu
是一种 "eraless year" - 例如,5BCE 是 -4 作为无纪元年。如果您不需要处理共同时代之前的日期(或其他日历系统中的日期),您可能不需要担心这一点。
我还建议将您的代码重写为:
DateTimeFormatter format = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("dd-MMM-yyyy HH:mm:ss")
.toFormatter();
...只是为了简单起见。