You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ms...@apache.org on 2015/02/02 23:44:06 UTC
svn commit: r1656598 - in /pdfbox/trunk/xmpbox/src:
main/java/org/apache/xmpbox/DateConverter.java
test/java/org/apache/xmpbox/DateConverterTest.java
Author: msahyoun
Date: Mon Feb 2 22:44:06 2015
New Revision: 1656598
URL: http://svn.apache.org/r1656598
Log:
PDFBOX-2319 millisecond precision is optional, add test case, fix SimpleDateFormatter string
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
URL: http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/DateConverter.java?rev=1656598&r1=1656597&r2=1656598&view=diff
==============================================================================
--- pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/DateConverter.java (original)
+++ pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/DateConverter.java Mon Feb 2 22:44:06 2015
@@ -233,71 +233,49 @@ public class DateConverter
}
/**
- * Append Zero to String Buffer.
- *
- * This will append zero before number < 10 ('1' become '01')
+ * Convert the date to iso 8601 string format.
*
- * @param out The String buffer
- * @param number The concerned number
+ * @param cal
+ * The date to convert.
+ * @return The date represented as an ISO 8601 string.
*/
- private static void zeroAppend(StringBuffer out, int number)
+ public static String toISO8601(Calendar cal)
{
- if (number < 10)
- {
- out.append("0");
- }
- out.append(number);
+ return toISO8601(cal, false);
}
-
+
/**
* Convert the date to iso 8601 string format.
*
- * @param cal
- * The date to convert.
+ * @param cal The date to convert.
+ * @param printMillis Print Milliseconds.
* @return The date represented as an ISO 8601 string.
*/
- public static String toISO8601(Calendar cal)
+ public static String toISO8601(Calendar cal, boolean printMillis)
{
- StringBuffer retval = new StringBuffer();
-
- retval.append(cal.get(Calendar.YEAR));
- retval.append("-");
- zeroAppend(retval, cal.get(Calendar.MONTH) + 1);
- retval.append("-");
- zeroAppend(retval, cal.get(Calendar.DAY_OF_MONTH));
- retval.append("T");
- zeroAppend(retval, cal.get(Calendar.HOUR_OF_DAY));
- retval.append(":");
- zeroAppend(retval, cal.get(Calendar.MINUTE));
- retval.append(":");
- zeroAppend(retval, cal.get(Calendar.SECOND));
-
- int timeZone = cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET);
- if (timeZone < 0)
+ final SimpleDateFormat iso8601Format = new SimpleDateFormat(
+ "yyyy-MM-dd'T'HH:mm:ssZ"
+ );
+ final SimpleDateFormat iso8601FormatMillis = new SimpleDateFormat(
+ "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
+ );
+
+ StringBuffer dateString = new StringBuffer();
+
+ if (printMillis)
{
- retval.append("-");
+ dateString.append(iso8601FormatMillis.format(cal.getTime()));
}
else
{
- retval.append("+");
+ dateString.append(iso8601Format.format(cal.getTime()));
}
- timeZone = Math.abs(timeZone);
- // milliseconds/1000 = seconds = seconds / 60 = minutes = minutes/60 =
- // hours
- int hours = timeZone / 1000 / 60 / 60;
- int minutes = (timeZone - (hours * 1000 * 60 * 60)) / 1000 / 1000;
- if (hours < 10)
- {
- retval.append("0");
- }
- retval.append(Integer.toString(hours));
- retval.append(":");
- if (minutes < 10)
- {
- retval.append("0");
- }
- retval.append(Integer.toString(minutes));
- return retval.toString();
+
+ // The Z format option prints the time zone in the format
+ // +0100. Unfortunately this is not in line with the IDO8601 specification
+ // the format is +01:00. We will insert the colon to the formatted date.
+ dateString.insert(dateString.length()-2, ':');
+ return dateString.toString();
}
/**
Modified: pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java?rev=1656598&r1=1656597&r2=1656598&view=diff
==============================================================================
--- pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java (original)
+++ pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java Mon Feb 2 22:44:06 2015
@@ -36,7 +36,7 @@ public class DateConverterTest
{
/**
- * Test several ISO6801 date formats.
+ * Test parsing several ISO8601 date formats.
*
* Test with additional time zone
* information normally not supported by ISO8601
@@ -47,7 +47,7 @@ public class DateConverterTest
public void testDateConversion() throws Exception
{
- final SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd'T'HH:mm.ss.SSSXXX");
+ final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Calendar jaxbCal = null,
convDate = null;
// Test partial dates
@@ -74,6 +74,21 @@ public class DateConverterTest
jaxbCal = javax.xml.bind.DatatypeConverter.parseDateTime("2015-02-02T16:37:19.192+01:00");
convDate = DateConverter.toCalendar("2015-02-02T16:37:19.192Europe/Berlin");
assertEquals(dateFormat.format(jaxbCal.getTime()), dateFormat.format(convDate.getTime()));
-
+ }
+
+ /**
+ * Test formatting ISO8601 date formats.
+ *
+ * Test with additional time zone
+ * information normally not supported by ISO8601
+ *
+ * @throws Exception when there is an exception
+ */
+ @Test
+ public void testDateFormatting() throws Exception
+ {
+ Calendar cal = DateConverter.toCalendar("2015-02-02T16:37:19.192Z");
+ assertEquals("2015-02-02T17:37:19+01:00", DateConverter.toISO8601(cal));
+ assertEquals("2015-02-02T17:37:19.192+01:00", DateConverter.toISO8601(cal,true));
}
}