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;