使用 java 8 DateTime API 解析日期和 AM/PM
我正在尝试使用java 8 DateTime API解析日期时间字符串。
要解析的字符串包含日期、月份、年份和 AM/PM 标记,例如 。我使用以下模式:我希望解析的 LocalDateTime 时间部分设置为 AM/PM 标记或取决于 AM/PM 标记。17/02/2015 PM
dd/MM/yyyy aa
12:00:00
00:00:00
使用以前的 API,使用此模式解析按预期工作。java.text.SimpleDateFormat
但是当我使用java 8 DateTime API并运行以下代码时:
LocalDateTime.parse("17/02/2015 PM", DateTimeFormatter.ofPattern("dd/MM/yyyy aa"));
我得到了以下异常:
Exception in thread "main" java.lang.IllegalArgumentException: Too many pattern letters: a
at java.time.format.DateTimeFormatterBuilder.parseField(DateTimeFormatterBuilder.java:1765)
at java.time.format.DateTimeFormatterBuilder.parsePattern(DateTimeFormatterBuilder.java:1604)
at java.time.format.DateTimeFormatterBuilder.appendPattern(DateTimeFormatterBuilder.java:1572)
at java.time.format.DateTimeFormatter.ofPattern(DateTimeFormatter.java:534)
如果我将模式切换到,那么我得到了folowing异常:dd/MM/yyyy a
Exception in thread "main" java.time.format.DateTimeParseException: Text '17/02/2015 PM' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {AmPmOfDay=1},ISO resolved to 2015-02-17 of type java.time.format.Parsed
at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1918)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1853)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
Caused by: java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: {AmPmOfDay=1},ISO resolved to 2015-02-17 of type java.time.format.Parsed
at java.time.LocalDateTime.from(LocalDateTime.java:461)
at java.time.LocalDateTime$$Lambda$7/474675244.queryFrom(Unknown Source)
at java.time.format.Parsed.query(Parsed.java:226)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1849)
... 2 more
Caused by: java.time.DateTimeException: Unable to obtain LocalTime from TemporalAccessor: {AmPmOfDay=1},ISO resolved to 2015-02-17 of type java.time.format.Parsed
at java.time.LocalTime.from(LocalTime.java:409)
at java.time.LocalDateTime.from(LocalDateTime.java:457)
... 5 more
同样奇怪的是,当我做反向操作,格式化时,它工作正常:
System.out.println(LocalDateTime.of(2015, 02, 17, 0, 0, 0).format(DateTimeFormatter.ofPattern("dd/MM/yyyy a")));
System.out.println(LocalDateTime.of(2015, 02, 17, 12, 0, 0).format(DateTimeFormatter.ofPattern("dd/MM/yyyy a")));
分别打印 和 .17/02/2015 AM
17/02/2015 PM
用于说的 javadoc (§Resolving, step #6):java.time.DateTimeFormatter
- 如果一天中至少有一小时可用,则形成 LocalTime。这涉及提供分钟、秒和秒的小数部分的默认值。
我所理解的是,字段小时一天是解析LocalDateTime所必需的...难道没有办法仅使用AM / PM字段来解析时间部分吗?