Author: tilman Date: Fri Sep 5 11:20:47 2025 New Revision: 1928247 Log: PDFBOX-6062: support nanoseconds
Modified: pdfbox/branches/3.0/xmpbox/src/main/java/org/apache/xmpbox/DateConverter.java pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java Modified: pdfbox/branches/3.0/xmpbox/src/main/java/org/apache/xmpbox/DateConverter.java ============================================================================== --- pdfbox/branches/3.0/xmpbox/src/main/java/org/apache/xmpbox/DateConverter.java Fri Sep 5 11:20:41 2025 (r1928246) +++ pdfbox/branches/3.0/xmpbox/src/main/java/org/apache/xmpbox/DateConverter.java Fri Sep 5 11:20:47 2025 (r1928247) @@ -26,6 +26,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; @@ -103,9 +104,17 @@ public final class DateConverter if (Pattern.matches("^\\d{4}-\\d{2}-\\d{2}T.*", date)) { // Assuming ISO860 date string - return fromISO8601(date); + try + { + return fromISO8601(date, "yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX][zzz]"); + } + catch (DateTimeParseException e) + { + // PDFBOX-6062: support nanoseconds + return fromISO8601(date, "yyyy-MM-dd'T'HH:mm:ss[.SSSSSS][XXX][zzz]"); + } } - else if (date.startsWith("D:")) + if (date.startsWith("D:")) { date = date.substring(2); } @@ -337,9 +346,9 @@ public final class DateConverter * @param dateString * @return the Calendar instance. */ - private static Calendar fromISO8601(String dateString) + private static Calendar fromISO8601(String dateString, String pattern) { - DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX][zzz]"); + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern); // Pattern to test for a time zone string Pattern timeZonePattern = Pattern.compile( Modified: pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java ============================================================================== --- pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java Fri Sep 5 11:20:41 2025 (r1928246) +++ pdfbox/branches/3.0/xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java Fri Sep 5 11:20:47 2025 (r1928247) @@ -58,6 +58,9 @@ class DateConverterTest convDate = DateConverter.toCalendar("D:2015-02-02"); assertEquals(2015, convDate.get(Calendar.YEAR)); + convDate = DateConverter.toCalendar("2025-09-03T15:43:47.989082+00:00"); + assertEquals(989, convDate.get(Calendar.MILLISECOND)); + assertThrows(IOException.class, () -> DateConverter.toCalendar("123")); //Test missing seconds