You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by ms...@apache.org on 2007/04/26 18:53:48 UTC

svn commit: r532801 - in /incubator/ode/trunk/utils/src: main/java/org/apache/ode/utils/xsd/XMLCalendar.java test/java/org/apache/ode/utils/xsd/XMLCalendarTest.java

Author: mszefler
Date: Thu Apr 26 09:53:47 2007
New Revision: 532801

URL: http://svn.apache.org/viewvc?view=rev&rev=532801
Log:
ODE-126
Fixed ISO date parsing when seconds/millis are unspecified.

Modified:
    incubator/ode/trunk/utils/src/main/java/org/apache/ode/utils/xsd/XMLCalendar.java
    incubator/ode/trunk/utils/src/test/java/org/apache/ode/utils/xsd/XMLCalendarTest.java

Modified: incubator/ode/trunk/utils/src/main/java/org/apache/ode/utils/xsd/XMLCalendar.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/utils/src/main/java/org/apache/ode/utils/xsd/XMLCalendar.java?view=diff&rev=532801&r1=532800&r2=532801
==============================================================================
--- incubator/ode/trunk/utils/src/main/java/org/apache/ode/utils/xsd/XMLCalendar.java (original)
+++ incubator/ode/trunk/utils/src/main/java/org/apache/ode/utils/xsd/XMLCalendar.java Thu Apr 26 09:53:47 2007
@@ -56,7 +56,7 @@
 	static final int TZ_MIN_MG = 10;
 
 	static final Pattern PATTERN =
-    Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}\\.?\\d*)(Z|(\\+|-)(\\d{2}):(\\d{2}))");
+    Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(:\\d{2}\\.?\\d*)?(Z|(\\+|-)(\\d{2}):(\\d{2}))");
 
 	public XMLCalendar(long time) {
 		this.setTimeInMillis(time);
@@ -69,11 +69,14 @@
       this.set(Integer.valueOf(m.group(YEAR_MG)), Integer.valueOf(m.group(MONTH_MG)),
           Integer.valueOf(m.group(DAY_MG)), Integer.valueOf(m.group(HOUR_MG)),
           Integer.valueOf(m.group(MIN_MG)));
-      BigDecimal sec = new BigDecimal(m.group(SEC_MG));
-      this.set(SECOND, sec.intValue());
-      BigDecimal fraction = sec.subtract(sec.setScale(0, BigDecimal.ROUND_DOWN));
-      int millisec = fraction.movePointRight(3).intValue();
-      this.set(Calendar.MILLISECOND, millisec);
+      if (m.group(SEC_MG) != null) {
+          BigDecimal sec = new BigDecimal(m.group(SEC_MG).substring(1));
+          this.set(SECOND, sec.intValue());
+          BigDecimal fraction = sec.subtract(sec.setScale(0, BigDecimal.ROUND_DOWN));
+          int millisec = fraction.movePointRight(3).intValue();
+          this.set(Calendar.MILLISECOND, millisec);
+      }
+      
 
       String tz = m.group(TZ_MG);
       if ("Z".equals(tz)) {

Modified: incubator/ode/trunk/utils/src/test/java/org/apache/ode/utils/xsd/XMLCalendarTest.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/utils/src/test/java/org/apache/ode/utils/xsd/XMLCalendarTest.java?view=diff&rev=532801&r1=532800&r2=532801
==============================================================================
--- incubator/ode/trunk/utils/src/test/java/org/apache/ode/utils/xsd/XMLCalendarTest.java (original)
+++ incubator/ode/trunk/utils/src/test/java/org/apache/ode/utils/xsd/XMLCalendarTest.java Thu Apr 26 09:53:47 2007
@@ -43,6 +43,19 @@
 		assertEquals(500, c.get(Calendar.MILLISECOND));
 		assertEquals(0, c.get(Calendar.ZONE_OFFSET));
 	}
+    
+    public void testNoSeconds() {
+        String TEST = "2000-10-05T23:12Z";
+        
+        Calendar c = new XMLCalendar(TEST);
+        assertEquals(2000, c.get(Calendar.YEAR));
+        assertEquals(10, c.get(Calendar.MONTH));
+        assertEquals(5, c.get(Calendar.DAY_OF_MONTH));
+        assertEquals(23, c.get(Calendar.HOUR_OF_DAY));
+        assertEquals(12, c.get(Calendar.MINUTE));
+        assertEquals(0, c.get(Calendar.ZONE_OFFSET));
+        
+    }
 	
 	public void testTimeZoneMinus(){
 		String TEST = "0001-01-01T01:01:01.1-08:00";