You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2014/12/30 22:03:51 UTC
[2/2] jena git commit: JENA-838 : Sort of canonical time portions.
JENA-838 : Sort of canonical time portions.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/311ee927
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/311ee927
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/311ee927
Branch: refs/heads/master
Commit: 311ee927f9c51e8e56671a4bb8728421a5534d9f
Parents: 0c7285c
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Dec 30 21:03:29 2014 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Dec 30 21:03:29 2014 +0000
----------------------------------------------------------------------
.../java/com/hp/hpl/jena/sparql/util/Utils.java | 37 +++++++++++++---
.../com/hp/hpl/jena/sparql/util/TestUtils.java | 46 ++++++++++++++------
2 files changed, 64 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/311ee927/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java b/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java
index 2cd29c3..1b97627 100644
--- a/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java
+++ b/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java
@@ -38,9 +38,24 @@ public class Utils {
// FastDateFormat uses "ZZ" for this.
private static final FastDateFormat dateTimeFmt_display = FastDateFormat.getInstance("yyyy/MM/dd HH:mm:ss z") ;
private static final FastDateFormat dateFmt_yyyymmdd = FastDateFormat.getInstance("yyyy-MM-ddZZ") ;
- private static final FastDateFormat dateTimeFmt_XSD = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss.SSSZZ") ;
- private static final FastDateFormat timeFmt_hhmmssSS = FastDateFormat.getInstance("HH:mm:ss.SSSZZ") ;
-
+
+ // Canonical form of datetimes: as of XML Schema Datatypes 1.1
+ // http://www.w3.org/TR/xmlschema11-2/
+ // The canonical form of seconds, including fractional part is the minimum length number,
+ // so the milliseconds never ends in zero.
+ // Whole seconds have no fractional part.
+ // Jena uses millis as 3 digits if non-zero.
+
+ // For milliseconds == 0
+ private static final FastDateFormat dateTimeFmt_XSD_ms0 = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ssZZ") ;
+ // For milliseconds != 0
+ private static final FastDateFormat dateTimeFmt_XSD_ms = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss.SSSZZ") ;
+
+ // For milliseconds == 0
+ private static final FastDateFormat timeFmt_XSD_ms0 = FastDateFormat.getInstance("HH:mm:ssZZ") ;
+ // For milliseconds != 0
+ private static final FastDateFormat timeFmt_XSD_ms = FastDateFormat.getInstance("HH:mm:ss.SSSZZ") ;
+
static public String className(Object obj) {
if ( obj == null )
return "null" ;
@@ -80,16 +95,28 @@ public class Utils {
return dateFormat.format(new Date()) ;
}
+ private static boolean hasZeroMilliSeconds(Calendar cal) {
+ return ! cal.isSet(Calendar.MILLISECOND) || cal.get(Calendar.MILLISECOND) == 0 ;
+ }
+
+ // Canonical fom : if ms == 0, don't include in the string.
public static String calendarToXSDDateTimeString(Calendar cal) {
- return calendarToXSDString(cal, dateTimeFmt_XSD) ;
+ FastDateFormat fmt = hasZeroMilliSeconds(cal)
+ ? dateTimeFmt_XSD_ms0
+ : dateTimeFmt_XSD_ms ;
+ return calendarToXSDString(cal, fmt) ;
}
public static String calendarToXSDDateString(Calendar cal) {
return calendarToXSDString(cal, dateFmt_yyyymmdd) ;
}
+ // Canonical fom : if ms == 0, don't include in the string.
public static String calendarToXSDTimeString(Calendar cal) {
- return calendarToXSDString(cal, timeFmt_hhmmssSS) ;
+ FastDateFormat fmt = hasZeroMilliSeconds(cal)
+ ? timeFmt_XSD_ms0
+ : timeFmt_XSD_ms ;
+ return calendarToXSDString(cal, fmt) ;
}
private static String calendarToXSDString(Calendar cal, FastDateFormat fmt) {
http://git-wip-us.apache.org/repos/asf/jena/blob/311ee927/jena-arq/src/test/java/com/hp/hpl/jena/sparql/util/TestUtils.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/com/hp/hpl/jena/sparql/util/TestUtils.java b/jena-arq/src/test/java/com/hp/hpl/jena/sparql/util/TestUtils.java
index 1bd66ae..cb9aced 100644
--- a/jena-arq/src/test/java/com/hp/hpl/jena/sparql/util/TestUtils.java
+++ b/jena-arq/src/test/java/com/hp/hpl/jena/sparql/util/TestUtils.java
@@ -31,36 +31,54 @@ import org.junit.Test;
public class TestUtils {
@Test
- public void testCalendarToXSDDateTimeString() throws Exception {
- Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 14, 32, 1,"Z") ;
- assertEquals("1984-03-22T14:32:01.000+00:00", calendarToXSDDateTimeString(cal));
+ public void testCalendarToXSDDateTimeString_1() throws Exception {
+ Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 14, 32, 1, 0, "Z") ;
+ assertEquals("1984-03-22T14:32:01+00:00", calendarToXSDDateTimeString(cal));
cal.setTimeZone(TimeZone.getTimeZone("MST"));
- assertEquals("1984-03-22T07:32:01.000-07:00", calendarToXSDDateTimeString(cal));
+ assertEquals("1984-03-22T07:32:01-07:00", calendarToXSDDateTimeString(cal));
}
- @Test
+ @Test
+ public void testCalendarToXSDDateTimeString_2() throws Exception {
+ Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 14, 32, 1, 50, "Z") ;
+ assertEquals("1984-03-22T14:32:01.050+00:00", calendarToXSDDateTimeString(cal));
+ cal.setTimeZone(TimeZone.getTimeZone("MST"));
+ assertEquals("1984-03-22T07:32:01.050-07:00", calendarToXSDDateTimeString(cal));
+ }
+
+
+ @Test
public void testCalendarToXSDDateString() throws Exception {
- Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 23, 59, 1, "Z");
+ Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 23, 59, 1, 0, "Z");
cal.setTimeZone(TimeZone.getTimeZone("Z")) ;
assertEquals("1984-03-22+00:00", calendarToXSDDateString(cal));
cal.setTimeZone(TimeZone.getTimeZone("MST"));
assertEquals("1984-03-22-07:00", calendarToXSDDateString(cal));
}
-
- @Test
- public void testCalendarToXSDTimeString() throws Exception {
- Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 14, 32, 1, "GMT+01:00");
- assertEquals("14:32:01.000+01:00", calendarToXSDTimeString(cal));
+
+ @Test
+ public void testCalendarToXSDTimeString_1() throws Exception {
+ Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 14, 32, 1, 0, "GMT+01:00");
+ assertEquals("14:32:01+01:00", calendarToXSDTimeString(cal));
// Different timezone - moves the cal point-in-time.
cal.setTimeZone(TimeZone.getTimeZone("MST"));
- assertEquals("06:32:01.000-07:00", calendarToXSDTimeString(cal));
+ assertEquals("06:32:01-07:00", calendarToXSDTimeString(cal));
}
+ @Test
+ public void testCalendarToXSDTimeString_2() throws Exception {
+ Calendar cal = createCalendar(1984, Calendar.MARCH, 22, 14, 32, 1, 500, "GMT+01:00");
+ assertEquals("14:32:01.500+01:00", calendarToXSDTimeString(cal));
+ // Different timezone - moves the cal point-in-time.
+ cal.setTimeZone(TimeZone.getTimeZone("MST"));
+ assertEquals("06:32:01.500-07:00", calendarToXSDTimeString(cal));
+ }
+
private static Calendar createCalendar(int year, int month, int dayOfMonth, int hourOfDay,
- int minute, int second, String tz) {
+ int minute, int second, int milli, String tz) {
GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone(tz)) ;
cal.set(year, month, dayOfMonth, hourOfDay, minute, second) ;
- cal.set(Calendar.MILLISECOND, 0) ;
+ cal.set(Calendar.MILLISECOND, milli) ;
return cal ;
}
}
\ No newline at end of file