Skip to content

Commit 2a2a059

Browse files
committed
PDFBOX-6062: support nanoseconds
git-svn-id: https://svn.apache.org/repos/asf/pdfbox/trunk@1928246 13f79535-47bb-0310-9956-ffa450edef68
1 parent bc1fd92 commit 2a2a059

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

xmpbox/src/main/java/org/apache/xmpbox/DateConverter.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.text.SimpleDateFormat;
2727
import java.time.ZonedDateTime;
2828
import java.time.format.DateTimeFormatter;
29+
import java.time.format.DateTimeParseException;
2930
import java.util.Calendar;
3031
import java.util.Date;
3132
import java.util.GregorianCalendar;
@@ -103,9 +104,17 @@ public static Calendar toCalendar(String date) throws IOException
103104
if (Pattern.matches("^\\d{4}-\\d{2}-\\d{2}T.*", date))
104105
{
105106
// Assuming ISO860 date string
106-
return fromISO8601(date);
107+
try
108+
{
109+
return fromISO8601(date, "yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX][zzz]");
110+
}
111+
catch (DateTimeParseException e)
112+
{
113+
// PDFBOX-6062: support nanoseconds
114+
return fromISO8601(date, "yyyy-MM-dd'T'HH:mm:ss[.SSSSSS][XXX][zzz]");
115+
}
107116
}
108-
else if (date.startsWith("D:"))
117+
if (date.startsWith("D:"))
109118
{
110119
date = date.substring(2);
111120
}
@@ -337,9 +346,9 @@ public static String toISO8601(Calendar cal, boolean printMillis)
337346
* @param dateString
338347
* @return the Calendar instance.
339348
*/
340-
private static Calendar fromISO8601(String dateString)
349+
private static Calendar fromISO8601(String dateString, String pattern)
341350
{
342-
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX][zzz]");
351+
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
343352

344353
// Pattern to test for a time zone string
345354
Pattern timeZonePattern = Pattern.compile(

xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ void testDateConversion() throws IOException
5858
convDate = DateConverter.toCalendar("D:2015-02-02");
5959
assertEquals(2015, convDate.get(Calendar.YEAR));
6060

61+
convDate = DateConverter.toCalendar("2025-09-03T15:43:47.989082+00:00");
62+
assertEquals(989, convDate.get(Calendar.MILLISECOND));
63+
6164
assertThrows(IOException.class, () -> DateConverter.toCalendar("123"));
6265

6366
// Test missing seconds

0 commit comments

Comments
 (0)