Author: tilman
Date: Sat Nov 29 11:36:47 2025
New Revision: 1930099
Log:
PDFBOX-6109: recognise datetime without timezone and improve test coverage
Modified:
pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/DateConverter.java
pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java
Modified: pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/DateConverter.java
==============================================================================
--- pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/DateConverter.java
Sat Nov 29 10:30:10 2025 (r1930098)
+++ pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/DateConverter.java
Sat Nov 29 11:36:47 2025 (r1930099)
@@ -144,7 +144,7 @@ public final class DateConverter
}
int timeZonePos = 12;
- if (date.length() - 12 > 5 || (date.length() - 12 == 3 &&
date.endsWith("Z")))
+ if (date.length() == 14 || date.length() - 12 > 5 ||
(date.length() - 12 == 3 && date.endsWith("Z")))
{
second = Integer.parseInt(date.substring(12, 14));
timeZonePos = 14;
Modified:
pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java
==============================================================================
--- pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java
Sat Nov 29 10:30:10 2025 (r1930098)
+++ pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java
Sat Nov 29 11:36:47 2025 (r1930099)
@@ -59,6 +59,42 @@ class DateConverterTest
convDate = DateConverter.toCalendar("D:2015-02-02");
assertEquals(2015, convDate.get(Calendar.YEAR));
+ convDate = DateConverter.toCalendar("D:2015-02-03T10:11:12");
+ assertEquals(2015, convDate.get(Calendar.YEAR));
+ assertEquals(1, convDate.get(Calendar.MONTH)); // 0-based
+ assertEquals(3, convDate.get(Calendar.DAY_OF_MONTH));
+ assertEquals(10, convDate.get(Calendar.HOUR));
+ assertEquals(11, convDate.get(Calendar.MINUTE));
+ assertEquals(12, convDate.get(Calendar.SECOND));
+
+ convDate = DateConverter.toCalendar("D:2015-02-03T10:11:12Z");
+ assertEquals(2015, convDate.get(Calendar.YEAR));
+ assertEquals(1, convDate.get(Calendar.MONTH)); // 0-based
+ assertEquals(3, convDate.get(Calendar.DAY_OF_MONTH));
+ assertEquals(10, convDate.get(Calendar.HOUR));
+ assertEquals(11, convDate.get(Calendar.MINUTE));
+ assertEquals(12, convDate.get(Calendar.SECOND));
+
+ convDate = DateConverter.toCalendar("D:2015-02-03T10:11:12+05:00");
+ assertEquals(2015, convDate.get(Calendar.YEAR));
+ assertEquals(1, convDate.get(Calendar.MONTH)); // 0-based
+ assertEquals(3, convDate.get(Calendar.DAY_OF_MONTH));
+ assertEquals(10, convDate.get(Calendar.HOUR));
+ assertEquals(11, convDate.get(Calendar.MINUTE));
+ assertEquals(12, convDate.get(Calendar.SECOND));
+ assertEquals(5 * 3600 * 1000, convDate.get(Calendar.ZONE_OFFSET));
+ assertEquals("GMT+05:00", convDate.getTimeZone().getDisplayName());
+
+ convDate = DateConverter.toCalendar("D:2015-02-03T10:11:12-05:00");
+ assertEquals(2015, convDate.get(Calendar.YEAR));
+ assertEquals(1, convDate.get(Calendar.MONTH)); // 0-based
+ assertEquals(3, convDate.get(Calendar.DAY_OF_MONTH));
+ assertEquals(10, convDate.get(Calendar.HOUR));
+ assertEquals(11, convDate.get(Calendar.MINUTE));
+ assertEquals(12, convDate.get(Calendar.SECOND));
+ assertEquals(-5 * 3600 * 1000, convDate.get(Calendar.ZONE_OFFSET));
+ assertEquals("GMT-05:00", convDate.getTimeZone().getDisplayName());
+
convDate =
DateConverter.toCalendar("2025-09-03T15:43:47.989082+00:00");
assertEquals(989, convDate.get(Calendar.MILLISECOND));