summaryrefslogtreecommitdiffstats
path: root/Lib/datetime.py
diff options
context:
space:
mode:
authorAlexander Belopolsky <abalkin@users.noreply.github.com>2018-06-10 21:02:58 (GMT)
committerGitHub <noreply@github.com>2018-06-10 21:02:58 (GMT)
commit877b23202b7e7d4f57b58504fd0eb886e8c0b377 (patch)
treeda6e7b1d515204db9e603a7aa3e01ab222dc2c3b /Lib/datetime.py
parentaf4b0130d44bf8a1ff4f7b46195d1dc79add444a (diff)
downloadcpython-877b23202b7e7d4f57b58504fd0eb886e8c0b377.zip
cpython-877b23202b7e7d4f57b58504fd0eb886e8c0b377.tar.gz
cpython-877b23202b7e7d4f57b58504fd0eb886e8c0b377.tar.bz2
bpo-33812: Corrected astimezone for naive datetimes. (GH-7578)
A datetime object d is aware if d.tzinfo is not None and d.tzinfo.utcoffset(d) does not return None. If d.tzinfo is None, or if d.tzinfo is not None but d.tzinfo.utcoffset(d) returns None, d is naive. This commit ensures that instances with non-None d.tzinfo, but d.tzinfo.utcoffset(d) returning None are treated as naive. In addition, C acceleration code will raise TypeError if d.tzinfo.utcoffset(d) returns an object with the type other than timedelta. * Updated the documentation. Assume that the term "naive" is defined elsewhere and remove the not entirely correct clarification. Thanks, Tim.
Diffstat (limited to 'Lib/datetime.py')
-rw-r--r--Lib/datetime.py9
1 files changed, 6 insertions, 3 deletions
diff --git a/Lib/datetime.py b/Lib/datetime.py
index 5e9aab9..5e922c8 100644
--- a/Lib/datetime.py
+++ b/Lib/datetime.py
@@ -1773,14 +1773,17 @@ class datetime(date):
mytz = self.tzinfo
if mytz is None:
mytz = self._local_timezone()
+ myoffset = mytz.utcoffset(self)
+ else:
+ myoffset = mytz.utcoffset(self)
+ if myoffset is None:
+ mytz = self.replace(tzinfo=None)._local_timezone()
+ myoffset = mytz.utcoffset(self)
if tz is mytz:
return self
# Convert self to UTC, and attach the new time zone object.
- myoffset = mytz.utcoffset(self)
- if myoffset is None:
- raise ValueError("astimezone() requires an aware datetime")
utc = (self - myoffset).replace(tzinfo=tz)
# Convert from UTC to tz's local time.