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";