diff --git a/poi/src/main/java/org/apache/poi/ss/usermodel/DateUtil.java b/poi/src/main/java/org/apache/poi/ss/usermodel/DateUtil.java index 01d825ac74..1b23d8dcce 100644 --- a/poi/src/main/java/org/apache/poi/ss/usermodel/DateUtil.java +++ b/poi/src/main/java/org/apache/poi/ss/usermodel/DateUtil.java @@ -78,10 +78,10 @@ public class DateUtil { private static final Pattern date_ptrn5 = Pattern.compile("^\\[DBNum([123])]"); private static final DateTimeFormatter dateTimeFormats = new DateTimeFormatterBuilder() - .appendPattern("[dd MMM[ yyyy]][[ ]h:m[:s] a][[ ]H:m[:s]]") - .appendPattern("[[yyyy ]dd-MMM[-yyyy]][[ ]h:m[:s] a][[ ]H:m[:s]]") - .appendPattern("[M/dd[/yyyy]][[ ]h:m[:s] a][[ ]H:m[:s]]") - .appendPattern("[[yyyy/]M/dd][[ ]h:m[:s] a][[ ]H:m[:s]]") + .appendPattern("[dd MMM[ yyyy]][[ ]h:m[:s][.SSS] a][[ ]H:m[:s][.SSS]]") + .appendPattern("[[yyyy ]dd-MMM[-yyyy]][[ ]h:m[:s][.SSS] a][[ ]H:m[:s][.SSS]]") + .appendPattern("[M/dd[/yyyy]][[ ]h:m[:s][.SSS] a][[ ]H:m[:s][.SSS]]") + .appendPattern("[[yyyy/]M/dd][[ ]h:m[:s][.SSS] a][[ ]H:m[:s][.SSS]]") .parseDefaulting(ChronoField.YEAR_OF_ERA, LocaleUtil.getLocaleCalendar().get(Calendar.YEAR)) .toFormatter(); diff --git a/poi/src/test/java/org/apache/poi/ss/formula/functions/TestTimeValue.java b/poi/src/test/java/org/apache/poi/ss/formula/functions/TestTimeValue.java index 1cbee788b8..b7f4d4a6ab 100644 --- a/poi/src/test/java/org/apache/poi/ss/formula/functions/TestTimeValue.java +++ b/poi/src/test/java/org/apache/poi/ss/formula/functions/TestTimeValue.java @@ -63,6 +63,9 @@ final class TestTimeValue { confirmTimeValue(new StringEval("12:00"), 0.5); // Serial number of a time entered as text. confirmTimeValue(new StringEval("6:00 PM"), 0.75); // Serial number of a time entered as text. confirmTimeValue(new StringEval("12:03:45"), 0.5026041666642413); // Serial number of a time entered as text. + + // this is not yet right as the milliseconds are not counted - but this used to cause a parse issue before + confirmTimeValue(new StringEval("12:03:45.386"), 0.5026041666642413); } finally { LocaleUtil.setUserLocale(null); }