Log message for revision 81213: Revert ISO8601 interpretation to previously broken behaviour (assume GMT rather than local time as per spec)
Changed: U Zope/trunk/lib/python/DateTime/DateTime.py U Zope/trunk/lib/python/DateTime/tests/testDateTime.py -=- Modified: Zope/trunk/lib/python/DateTime/DateTime.py =================================================================== --- Zope/trunk/lib/python/DateTime/DateTime.py 2007-10-30 17:23:24 UTC (rev 81212) +++ Zope/trunk/lib/python/DateTime/DateTime.py 2007-10-30 17:45:10 UTC (rev 81213) @@ -451,6 +451,9 @@ </PRE> See http://en.wikipedia.org/wiki/ISO_8601 for full specs. + + Note that the Zope DateTime parser assumes timezone naive ISO + strings to be in UTC rather than local time as specified. - If the DateTime function is invoked with a single Numeric argument, the number is assumed to be a floating point value @@ -1798,14 +1801,12 @@ if fields['signal'] or fields['Z']: tznaive = False - tz = 'GMT%+03d%02d' % (hour_off, min_off) else: tznaive = True - # Figure out what time zone it is in the local area - # on the given date. - ms = seconds - math.floor(seconds) - x = _calcDependentSecond2(year,month,day,hour,minute,seconds) - tz = self._calcTimezoneName(x, ms) + + # Differ from the specification here. To preserve backwards + # compatibility assume a default timezone == UTC. + tz = 'GMT%+03d%02d' % (hour_off, min_off) return year, month, day, hour, minute, seconds, tz, tznaive Modified: Zope/trunk/lib/python/DateTime/tests/testDateTime.py =================================================================== --- Zope/trunk/lib/python/DateTime/tests/testDateTime.py 2007-10-30 17:23:24 UTC (rev 81212) +++ Zope/trunk/lib/python/DateTime/tests/testDateTime.py 2007-10-30 17:45:10 UTC (rev 81213) @@ -262,21 +262,22 @@ def testISO8601(self): # ISO8601 reference dates - ref0 = DateTime('2002/5/2 8:00am') + ref0 = DateTime('2002/5/2 8:00am GMT') ref1 = DateTime('2002/5/2 8:00am US/Eastern') ref2 = DateTime('2006/11/6 10:30') ref3 = DateTime('2004/06/14 14:30:15 GMT-3') ref4 = DateTime('2006/01/01') - ref5 = DateTime('2002/5/2 8:00am GMT') # Basic tests - # this is timezone naive and should be interpreted in the local timezone + # Though this is timezone naive and according to specification should + # be interpreted in the local timezone, to preserve backwards + # compatibility with previously expected behaviour. isoDt = DateTime('2002-05-02T08:00:00') self.assertEqual(ref0, isoDt) isoDt = DateTime('2002-05-02T08:00:00Z') - self.assertEqual(ref5, isoDt) + self.assertEqual(ref0, isoDt) isoDt = DateTime('2002-05-02T08:00:00+00:00') - self.assertEqual(ref5, isoDt) + self.assertEqual(ref0, isoDt) isoDt = DateTime('2002-05-02T08:00:00-04:00') self.assertEqual(ref1, isoDt) isoDt = DateTime('2002-05-02 08:00:00-04:00') @@ -310,7 +311,7 @@ # Bug 2191: timezones with only one digit for hour isoDt = DateTime('20020502T080000+0') - self.assertEqual(ref5, isoDt) + self.assertEqual(ref0, isoDt) isoDt = DateTime('20020502 080000-4') self.assertEqual(ref1, isoDt) isoDt = DateTime('20020502T080000-400') _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins