Author: andy
Date: Wed Oct 23 10:23:19 2013
New Revision: 1534973

URL: http://svn.apache.org/r1534973
Log:
JENA-565

Modified:
    
jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/datatypes/xsd/XSDDateTime.java
    
jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/graph/test/TestTypedLiterals.java

Modified: 
jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/datatypes/xsd/XSDDateTime.java
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/datatypes/xsd/XSDDateTime.java?rev=1534973&r1=1534972&r2=1534973&view=diff
==============================================================================
--- 
jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/datatypes/xsd/XSDDateTime.java
 (original)
+++ 
jena/trunk/jena-core/src/main/java/com/hp/hpl/jena/datatypes/xsd/XSDDateTime.java
 Wed Oct 23 10:23:19 2013
@@ -259,6 +259,12 @@ public class XSDDateTime extends Abstrac
     public String toString() {
         StringBuffer buff = new StringBuffer();
         if ((mask & YEAR_MASK) != 0) {
+            int cy = data[CY] ;
+            int absCY = Math.abs(cy) ;
+            // XSD dateTime requires at least 4 digits for the year field
+            if ( absCY < 10  )  buff.append('0') ;
+            if ( absCY < 100 )  buff.append('0') ;
+            if ( absCY < 1000 ) buff.append('0') ;
             buff.append(data[CY]);
         } else {
             buff.append("-");
@@ -266,24 +272,24 @@ public class XSDDateTime extends Abstrac
         if ((mask & (MONTH_MASK | DAY_MASK)) != 0) {
             buff.append("-");
             if ((mask & MONTH_MASK) != 0) {
-                if (data[M] <= 9) buff.append("0");
+                if (data[M] <= 9) buff.append('0');
                 buff.append(data[M]);
             } else {
                 buff.append("-");
             }
             if ((mask & DAY_MASK) != 0) {
-                if (mask != DAY_MASK) buff.append("-");
-                if (data[D] <= 9) buff.append("0");
+                if (mask != DAY_MASK) buff.append('-');
+                if (data[D] <= 9) buff.append('0');
                 buff.append(data[D]);
             }
         }
         if ((mask & TIME_MASK) != 0 ) {
-            buff.append("T");
+            buff.append('T');
             buff.append(timeLexicalForm());
         }
 
         if ( data[utc] != 0 )
-            buff.append("Z");
+            buff.append('Z');
 
         return buff.toString();
     }

Modified: 
jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/graph/test/TestTypedLiterals.java
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/graph/test/TestTypedLiterals.java?rev=1534973&r1=1534972&r2=1534973&view=diff
==============================================================================
--- 
jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/graph/test/TestTypedLiterals.java
 (original)
+++ 
jena/trunk/jena-core/src/test/java/com/hp/hpl/jena/graph/test/TestTypedLiterals.java
 Wed Oct 23 10:23:19 2013
@@ -587,6 +587,19 @@ public class TestTypedLiterals extends T
         testCal4.set(Calendar.MILLISECOND, 2);
         doDateTimeTest(testCal4, "1999-05-30T15:09:32.002Z", 32.002);
         
+        // Years before 1000 : xsd:dateTime requires at least a four digit 
year.
+        int[] years = { -7777, -777, -77, -7, 7, 77, 777 , 7777 } ;
+        for ( int y : years ) {
+            Calendar calM1 = Calendar.getInstance();
+            calM1.set(Calendar.YEAR,  y);
+            calM1.set(Calendar.MONTH, 10);
+            calM1.set(Calendar.DATE,  23);
+            XSDDateTime xdtM = new XSDDateTime(calM1);
+            LiteralLabel xdtM_ll = LiteralLabelFactory.create(xdtM, "", 
XSDDatatype.XSDdateTime);
+            
+            assertTrue("Pre-1000 calendar value", 
xdtM_ll.getLexicalForm().matches("-?[0-9]{4}-.*")) ;
+            assertTrue("Pre-1000 calendar value", xdtM_ll.isWellFormed()) ;
+        }
         // Illegal dateTimes
         boolean ok = false;
         boolean old = JenaParameters.enableEagerLiteralValidation;


Reply via email to