Commit d8a7e73f authored by Paul Winkler's avatar Paul Winkler

Merged the slinkp-datetime-200007 branch: fix the DateTime(anotherDateTime)...

Merged the slinkp-datetime-200007 branch: fix the DateTime(anotherDateTime) constructor to preserve timezones.
parent d719169a
......@@ -68,7 +68,7 @@ iso8601Match = re.compile(r'''
(?:-? # one optional dash
(?: # followed by:
(?P<year_day>\d\d\d # three digits year day
(?!\d)) # when there's no fourth digit
(?!\d)) # when there is no fourth digit
| # or:
W # one W
(?P<week>\d\d) # two digits week
......@@ -586,12 +586,11 @@ class DateTime:
DateTime instance.
"""
t = arg.timeTime()
lt = safelocaltime(t)
tz = self.localZone(lt)
tz = arg.timezone()
ms = (t - math.floor(t))
s,d = _calcSD(t)
yr,mo,dy,hr,mn,sc=lt[:6]
sc=sc+ms
yr,mo,dy,hr,mn,sc = gmtime(t)[:6]
sc = sc + ms
elif isinstance(arg, datetime):
yr,mo,dy,hr,mn,sc,numerictz,tznaive=self._parse_iso8601_preserving_tznaive(arg.isoformat())
......
......@@ -386,6 +386,19 @@ class DateTimeTests(unittest.TestCase):
d = DateTime('1999/04/12')
self.assertEqual(DateTime(d), d)
def testCopyConstructorPreservesTimezone(self):
# test for https://bugs.launchpad.net/zope2/+bug/200007
# This always worked in the local timezone, so we need at least
# two tests with different zones to be sure at least one of them
# is not local.
d = DateTime('2004/04/04')
self.assertEqual(DateTime(d).timezone(), d.timezone())
d2 = DateTime('2008/04/25 12:00:00 EST')
self.assertEqual(DateTime(d2).timezone(), d2.timezone())
d3 = DateTime('2008/04/25 12:00:00 PST')
self.assertEqual(DateTime(d3).timezone(), d3.timezone())
def testRFC822(self):
# rfc822 conversion
dt = DateTime('2002-05-02T08:00:00+00:00')
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment