ADDITIONAL SYSTEM INFORMATION : macos/JDK14 A DESCRIPTION OF THE PROBLEM : Hour can be represented as an ChronoField.CLOCK_HOUR_OF_DAY, CLOCK_HOUR_OF_AMPM, HOUR_OF_AMPM and HOUR_OF_DAY all these are resolved to HOUR_OF_DAY during resolving phase (see Parsed.resolveTimeFIelds) using a pattern with parseDefaulting leads to a an exception suggesting a conflict being thrown. STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : DateTimeFormatter dateTimeFormatterWithDefault = new DateTimeFormatterBuilder() .appendPattern("dd-MM-uuuu hh:mm a") .parseDefaulting(ChronoField.HOUR_OF_DAY, 23L) .toFormatter(); TemporalAccessor parsingFails = dateTimeFormatterWithDefault.parse("01-01-2020 01:01 AM"); EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - assertEquals(01, parsingFails.get(ChronoField.HOUR_OF_DAY)); assertEquals(01, parsingFails.get(ChronoField.HOUR_OF_AMPM)); ACTUAL - java.time.format.DateTimeParseException: Text '01-01-2020 01:01 AM' could not be parsed: Conflict found: HourOfDay 23 differs from HourOfDay 1 while resolving AmPmOfDay at java.base/java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:2020) at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1881) ---------- BEGIN SOURCE ---------- public void testX(){ DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder() .appendPattern("dd-MM-uuuu hh:mm a") .toFormatter(); TemporalAccessor parse = dateTimeFormatter.parse("01-01-2020 01:01 AM"); assertTrue(parse.isSupported(ChronoField.HOUR_OF_DAY)); assertTrue(parse.isSupported(ChronoField.HOUR_OF_AMPM)); assertEquals(01, parse.get(ChronoField.HOUR_OF_DAY)); assertEquals(01, parse.get(ChronoField.HOUR_OF_AMPM)); //Parsed.resolveTimeFields() resolves hour field to HOUR_OF_DAY DateTimeFormatter dateTimeFormatterWithDefault = new DateTimeFormatterBuilder() .appendPattern("dd-MM-uuuu hh:mm a") .parseDefaulting(ChronoField.HOUR_OF_DAY, 23L) .toFormatter(); TemporalAccessor parsingFails = dateTimeFormatterWithDefault.parse("01-01-2020 01:01 AM"); /* java.time.format.DateTimeParseException: Text '01-01-2020 01:01 AM' could not be parsed: Conflict found: HourOfDay 23 differs from HourOfDay 1 while resolving AmPmOfDay at java.base/java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:2020) at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1881) */ } ---------- END SOURCE ---------- FREQUENCY : always
|