Skip to content

Commit d7a1b3d

Browse files
committed
PDFBOX-6109: recognise datetime without timezone and improve test coverage
git-svn-id: https://svn.apache.org/repos/asf/pdfbox/trunk@1930099 13f79535-47bb-0310-9956-ffa450edef68
1 parent 2988421 commit d7a1b3d

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public static Calendar toCalendar(String date) throws IOException
144144
}
145145

146146
int timeZonePos = 12;
147-
if (date.length() - 12 > 5 || (date.length() - 12 == 3 && date.endsWith("Z")))
147+
if (date.length() == 14 || date.length() - 12 > 5 || (date.length() - 12 == 3 && date.endsWith("Z")))
148148
{
149149
second = Integer.parseInt(date.substring(12, 14));
150150
timeZonePos = 14;

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

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

62+
convDate = DateConverter.toCalendar("D:2015-02-03T10:11:12");
63+
assertEquals(2015, convDate.get(Calendar.YEAR));
64+
assertEquals(1, convDate.get(Calendar.MONTH)); // 0-based
65+
assertEquals(3, convDate.get(Calendar.DAY_OF_MONTH));
66+
assertEquals(10, convDate.get(Calendar.HOUR));
67+
assertEquals(11, convDate.get(Calendar.MINUTE));
68+
assertEquals(12, convDate.get(Calendar.SECOND));
69+
70+
convDate = DateConverter.toCalendar("D:2015-02-03T10:11:12Z");
71+
assertEquals(2015, convDate.get(Calendar.YEAR));
72+
assertEquals(1, convDate.get(Calendar.MONTH)); // 0-based
73+
assertEquals(3, convDate.get(Calendar.DAY_OF_MONTH));
74+
assertEquals(10, convDate.get(Calendar.HOUR));
75+
assertEquals(11, convDate.get(Calendar.MINUTE));
76+
assertEquals(12, convDate.get(Calendar.SECOND));
77+
78+
convDate = DateConverter.toCalendar("D:2015-02-03T10:11:12+05:00");
79+
assertEquals(2015, convDate.get(Calendar.YEAR));
80+
assertEquals(1, convDate.get(Calendar.MONTH)); // 0-based
81+
assertEquals(3, convDate.get(Calendar.DAY_OF_MONTH));
82+
assertEquals(10, convDate.get(Calendar.HOUR));
83+
assertEquals(11, convDate.get(Calendar.MINUTE));
84+
assertEquals(12, convDate.get(Calendar.SECOND));
85+
assertEquals(5 * 3600 * 1000, convDate.get(Calendar.ZONE_OFFSET));
86+
assertEquals("GMT+05:00", convDate.getTimeZone().getDisplayName());
87+
88+
convDate = DateConverter.toCalendar("D:2015-02-03T10:11:12-05:00");
89+
assertEquals(2015, convDate.get(Calendar.YEAR));
90+
assertEquals(1, convDate.get(Calendar.MONTH)); // 0-based
91+
assertEquals(3, convDate.get(Calendar.DAY_OF_MONTH));
92+
assertEquals(10, convDate.get(Calendar.HOUR));
93+
assertEquals(11, convDate.get(Calendar.MINUTE));
94+
assertEquals(12, convDate.get(Calendar.SECOND));
95+
assertEquals(-5 * 3600 * 1000, convDate.get(Calendar.ZONE_OFFSET));
96+
assertEquals("GMT-05:00", convDate.getTimeZone().getDisplayName());
97+
6298
convDate = DateConverter.toCalendar("2025-09-03T15:43:47.989082+00:00");
6399
assertEquals(989, convDate.get(Calendar.MILLISECOND));
64100

0 commit comments

Comments
 (0)