summaryrefslogtreecommitdiffstats
path: root/Lib/datetime.py
diff options
context:
space:
mode:
authorAlexander Belopolsky <alexander.belopolsky@gmail.com>2012-06-22 16:23:23 (GMT)
committerAlexander Belopolsky <alexander.belopolsky@gmail.com>2012-06-22 16:23:23 (GMT)
commitfdc860f3106b59ec908e0b605e51a1607ea2ff4b (patch)
tree987e362d240fea4f004803dd9fa0dd62b5d35db2 /Lib/datetime.py
parent8f904daee9dcb6b36b925f184144921e8bf6aaa6 (diff)
downloadcpython-fdc860f3106b59ec908e0b605e51a1607ea2ff4b.zip
cpython-fdc860f3106b59ec908e0b605e51a1607ea2ff4b.tar.gz
cpython-fdc860f3106b59ec908e0b605e51a1607ea2ff4b.tar.bz2
Issue #9527: datetime.astimezone() method will now supply a class
timezone instance corresponding to the system local timezone when called with no arguments.
Diffstat (limited to 'Lib/datetime.py')
-rw-r--r--Lib/datetime.py28
1 files changed, 26 insertions, 2 deletions
diff --git a/Lib/datetime.py b/Lib/datetime.py
index 6ab2499..ce88d85 100644
--- a/Lib/datetime.py
+++ b/Lib/datetime.py
@@ -1493,8 +1493,32 @@ class datetime(date):
return datetime(year, month, day, hour, minute, second,
microsecond, tzinfo)
- def astimezone(self, tz):
- if not isinstance(tz, tzinfo):
+ def astimezone(self, tz=None):
+ if tz is None:
+ if self.tzinfo is None:
+ raise ValueError("astimezone() requires an aware datetime")
+ ts = (self - _EPOCH) // timedelta(seconds=1)
+ localtm = _time.localtime(ts)
+ local = datetime(*localtm[:6])
+ try:
+ # Extract TZ data if available
+ gmtoff = localtm.tm_gmtoff
+ zone = localtm.tm_zone
+ except AttributeError:
+ # Compute UTC offset and compare with the value implied
+ # by tm_isdst. If the values match, use the zone name
+ # implied by tm_isdst.
+ delta = local - datetime(*_time.gmtime(ts)[:6])
+ dst = _time.daylight and localtm.tm_isdst > 0
+ gmtoff = _time.altzone if dst else _time.timezone
+ if delta == timedelta(seconds=-gmtoff):
+ tz = timezone(delta, _time.tzname[dst])
+ else:
+ tz = timezone(delta)
+ else:
+ tz = timezone(timedelta(seconds=-gmtoff), zone)
+
+ elif not isinstance(tz, tzinfo):
raise TypeError("tz argument must be an instance of tzinfo")
mytz = self.tzinfo