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 2012/07/29 22:00:35 UTC

svn commit: r1366929 - in /jena/trunk/jena-tdb/src: main/java/com/hp/hpl/jena/tdb/store/DateTimeNode.java test/java/com/hp/hpl/jena/tdb/store/TestNodeId.java

Author: andy
Date: Sun Jul 29 20:00:35 2012
New Revision: 1366929

URL: http://svn.apache.org/viewvc?rev=1366929&view=rev
Log:
JENA-287

Handle timezones with negative offets and non-zero minutes

Modified:
    jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/DateTimeNode.java
    jena/trunk/jena-tdb/src/test/java/com/hp/hpl/jena/tdb/store/TestNodeId.java

Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/DateTimeNode.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/DateTimeNode.java?rev=1366929&r1=1366928&r2=1366929&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/DateTimeNode.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/DateTimeNode.java Sun Jul 29 20:00:35 2012
@@ -140,7 +140,7 @@ public class DateTimeNode
         // T24:00:00 not accepted.
         // See also TestNodeId.nodeId_date_time_7
         
-        XMLGregorianCalendar xcal = datatypeFactory.newXMLGregorianCalendar(lex) ; ;
+        XMLGregorianCalendar xcal = datatypeFactory.newXMLGregorianCalendar(lex) ;
         
         if ( xcal.getFractionalSecond() != null )
         { 
@@ -177,24 +177,12 @@ public class DateTimeNode
 
     public static String unpackDateTime(long v)
     {
-        try {
-            return unpack(v, true) ;
-        } catch (RuntimeException ex)
-        {
-            System.err.printf("Failed to unpackDateTime: %08X\n",v) ; 
-            throw ex ;
-        }
+        return unpack(v, true) ;
     }
 
     public static String unpackDate(long v)
     {
-        try {
-            return unpack(v, false) ;
-        } catch (RuntimeException ex)
-        {
-            System.err.printf("Failed to unpackDate: %08X\n",v) ; 
-            throw ex ;
-        }
+        return unpack(v, false) ;
     }
 
     // Avoid calls to String.format
@@ -245,8 +233,7 @@ public class DateTimeNode
             }
         }
         // tz in 15min units
-        
-
+        // Special values.
         if ( tz == TZ_Z )
         {
             sb.append("Z") ;
@@ -260,11 +247,19 @@ public class DateTimeNode
         if ( BitsLong.isSet(v, TZ+TZ_LEN-1) )
             tz = BitsInt.set(tz, TZ_LEN, 32) ;
         
+        if ( tz < 0 )
+        {
+            tz = -tz ;
+            sb.append('-') ;
+        }
+        else
+            sb.append('+') ;
+            
         int tzH = tz/4 ;
         int tzM = (tz%4)*15 ;
-        NumberUtils.formatSignedInt(sb, tzH, 3) ; // Sign always included.
+        NumberUtils.formatUnsignedInt(sb, tzH, 2) ;
         sb.append(':') ;
-        NumberUtils.formatInt(sb, tzM, 2) ;
+        NumberUtils.formatUnsignedInt(sb, tzM, 2) ;
         return sb.toString();
     }
 }

Modified: jena/trunk/jena-tdb/src/test/java/com/hp/hpl/jena/tdb/store/TestNodeId.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/test/java/com/hp/hpl/jena/tdb/store/TestNodeId.java?rev=1366929&r1=1366928&r2=1366929&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/test/java/com/hp/hpl/jena/tdb/store/TestNodeId.java (original)
+++ jena/trunk/jena-tdb/src/test/java/com/hp/hpl/jena/tdb/store/TestNodeId.java Sun Jul 29 20:00:35 2012
@@ -122,13 +122,21 @@ public class TestNodeId extends BaseTest
     @Test public void nodeId_dateTime_13()
     { test("'2008-04-28T15:36:05.100'^^xsd:dateTime", "'2008-04-28T15:36:05.1'^^xsd:dateTime") ; }
 
-    // Out of range.
-    // But XMLGregorian calendar truncates.
-//    @Test public void nodeId_dateTime_14()
-//    { test("'2008-04-28T15:36:05.0001'^^xsd:dateTime") ; }
-//
-//    @Test public void nodeId_dateTime_15()
-//    { test("'2008-04-28T15:36:05.00010'^^xsd:dateTime", "'2008-04-28T15:36:05.0001'^^xsd:dateTime") ; }
+    @Test public void nodeId_dateTime_14()
+    { test("'2012-07-29T20:39:11.100+01:15'^^xsd:dateTime", "'2012-07-29T20:39:11.1+01:15'^^xsd:dateTime") ; }
+
+    @Test public void nodeId_dateTime_15()
+    { test("'2012-07-29T20:39:11.100-01:15'^^xsd:dateTime", "'2012-07-29T20:39:11.1-01:15'^^xsd:dateTime") ; }
+
+
+    @Test public void nodeId_dateTime_16()
+    { test("'2012-07-29T20:39:11.100+01:30'^^xsd:dateTime", "'2012-07-29T20:39:11.1+01:30'^^xsd:dateTime") ; }
+
+    @Test public void nodeId_dateTime_17()
+    { test("'2012-07-29T20:39:11.100-01:45'^^xsd:dateTime", "'2012-07-29T20:39:11.1-01:45'^^xsd:dateTime") ; }
+
+    @Test public void nodeId_dateTime_18()
+    { test("'2012-07-29T20:39:11.100Z'^^xsd:dateTime", "'2012-07-29T20:39:11.1Z'^^xsd:dateTime") ; }
 
     @Test public void nodeId_date_1()
     { test("'2008-04-28Z'^^xsd:date", NodeFactory.parseNode("'2008-04-28Z'^^xsd:date")) ; }
@@ -145,6 +153,12 @@ public class TestNodeId extends BaseTest
     @Test public void nodeId_date_5()
     { test("'8008-04-28'^^xsd:date", (Node)null) ; }
 
+    @Test public void nodeId_date_6()
+    { test("'2012-07-29+06:15'^^xsd:date", "'2012-07-29+06:15'^^xsd:date") ; }
+
+    @Test public void nodeId_date_7()
+    { test("'2012-07-29-06:30'^^xsd:date", "'2012-07-29-06:30'^^xsd:date") ; }
+
     @Test public void nodeId_boolean_1()
     { test("'true'^^xsd:boolean", NodeFactory.parseNode("'true'^^xsd:boolean")) ; }