You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2019/12/03 14:14:00 UTC
svn commit: r1870756 - in /jackrabbit/trunk/jackrabbit-jcr-commons/src:
main/java/org/apache/jackrabbit/util/ISO8601.java
test/java/org/apache/jackrabbit/util/ISO8601Test.java
Author: reschke
Date: Tue Dec 3 14:14:00 2019
New Revision: 1870756
URL: http://svn.apache.org/viewvc?rev=1870756&view=rev
Log:
JCR-4502: ISO8601: add variants outputting 'SHORT' format (no milliseconds)
Modified:
jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ISO8601.java
jackrabbit/trunk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/ISO8601Test.java
Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ISO8601.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ISO8601.java?rev=1870756&r1=1870755&r2=1870756&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ISO8601.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/ISO8601.java Tue Dec 3 14:14:00 2019
@@ -326,6 +326,10 @@ public final class ISO8601 {
* with more than four digits).
*/
public static String format(Calendar cal) throws IllegalArgumentException {
+ return format(cal, true);
+ }
+
+ private static String format(Calendar cal, boolean includeMs) throws IllegalArgumentException {
if (cal == null) {
throw new IllegalArgumentException("argument can not be null");
}
@@ -355,9 +359,11 @@ public final class ISO8601 {
buf.append(':');
// second (ss)
appendZeroPaddedInt(buf, cal.get(Calendar.SECOND), 2);
- buf.append('.');
- // millisecond (SSS)
- appendZeroPaddedInt(buf, cal.get(Calendar.MILLISECOND), 3);
+ if (includeMs) {
+ buf.append('.');
+ // millisecond (SSS)
+ appendZeroPaddedInt(buf, cal.get(Calendar.MILLISECOND), 3);
+ }
// time zone designator (Z or +00:00 or -00:00)
TimeZone tz = cal.getTimeZone();
// determine offset of timezone from UTC (incl. daylight saving)
@@ -403,6 +409,62 @@ public final class ISO8601 {
return year;
}
+
+ /**
+ * Variants that exclude the milliseconds from the formatted string.
+ *
+ */
+ public static class SHORT {
+
+ /**
+ * @see ISO8601#format(Date)
+ */
+ public static String format(Date date) throws IllegalArgumentException {
+ return format(date, 0);
+ }
+
+ /**
+ * @see ISO8601#format(Clock)
+ */
+ public static String format(Clock clock) throws IllegalArgumentException {
+ return format(clock.millis(), clock.getZone().getRules().getOffset(clock.instant()).getTotalSeconds());
+ }
+
+ /**
+ * @see ISO8601#format(long)
+ */
+ public static String format(long millisSinceEpoch) throws IllegalArgumentException {
+ return format(millisSinceEpoch, 0);
+ }
+
+ /**
+ * @see ISO8601#format(Date, int)
+ */
+ public static String format(Date date, int tzOffsetInSeconds) throws IllegalArgumentException {
+ if (date == null) {
+ throw new IllegalArgumentException("argument can not be null");
+ }
+ return format(date.getTime(), tzOffsetInSeconds);
+ }
+
+ /**
+ * @see ISO8601#format(long, int)
+ */
+ public static String format(long millisSinceEpoch, int tzOffsetInSeconds) throws IllegalArgumentException {
+ Calendar cal = Calendar.getInstance();
+ cal.setTimeZone(tzOffsetInSeconds == 0 ? UTC : new SimpleTimeZone(tzOffsetInSeconds * 1000, ""));
+ cal.setTimeInMillis(millisSinceEpoch);
+ return format(cal);
+ }
+
+ /**
+ * @see ISO8601#format(Calendar)
+ */
+ public static String format(Calendar cal) throws IllegalArgumentException {
+ return ISO8601.format(cal, false);
+ }
+ }
+
/**
* Appends a zero-padded number to the given string buffer.
* <p>
Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/ISO8601Test.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/ISO8601Test.java?rev=1870756&r1=1870755&r2=1870756&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/ISO8601Test.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/ISO8601Test.java Tue Dec 3 14:14:00 2019
@@ -76,6 +76,30 @@ public class ISO8601Test extends TestCas
assertEquals("1973-11-29T21:33:09.012Z", ISO8601.format(new Date(123456789012L), 0));
}
+ public void testFormatUTCShort() {
+ Calendar c = Calendar.getInstance();
+ c.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Clock clock;
+
+ c.setTimeInMillis(0);
+ clock = Clock.fixed(Instant.ofEpochMilli(0), ZoneId.of("Z"));
+ assertEquals("1970-01-01T00:00:00Z", ISO8601.SHORT.format(c));
+ assertEquals("1970-01-01T00:00:00Z", ISO8601.SHORT.format(clock));
+ assertEquals("1970-01-01T00:00:00Z", ISO8601.SHORT.format(0));
+ assertEquals("1970-01-01T00:00:00Z", ISO8601.SHORT.format(new Date(0)));
+ assertEquals("1970-01-01T00:00:00Z", ISO8601.SHORT.format(0, 0));
+ assertEquals("1970-01-01T00:00:00Z", ISO8601.SHORT.format(new Date(0), 0));
+
+ c.setTimeInMillis(123456789012L);
+ clock = Clock.fixed(Instant.ofEpochMilli(123456789012L), ZoneId.of("Z"));
+ assertEquals("1973-11-29T21:33:09Z", ISO8601.SHORT.format(c));
+ assertEquals("1973-11-29T21:33:09Z", ISO8601.SHORT.format(clock));
+ assertEquals("1973-11-29T21:33:09Z", ISO8601.SHORT.format(123456789012L));
+ assertEquals("1973-11-29T21:33:09Z", ISO8601.SHORT.format(new Date(123456789012L)));
+ assertEquals("1973-11-29T21:33:09Z", ISO8601.SHORT.format(123456789012L, 0));
+ assertEquals("1973-11-29T21:33:09Z", ISO8601.SHORT.format(new Date(123456789012L), 0));
+ }
+
public void testFormatCustomTz() {
Calendar c = Calendar.getInstance();
c.setTimeZone(customPlus);