Skip to content

Commit c132630

Browse files
committed
Simplify datetime with tzinfo example
Move the example in the documentation to just use timezone.utc and a user defined Kabul timezone rather than having two user defined timezones with DST. Kabul timezone is still interesting as it changes its offset but not based on DST. This is more accurate as the previous example was missing information about the fold attribute. Additionally, implementing the fold attribute was rather complex and probably not relevant enough for the section "datetime with tzinfo".
1 parent 7db9cba commit c132630

File tree

1 file changed

+17
-38
lines changed

1 file changed

+17
-38
lines changed

Doc/library/datetime.rst

Lines changed: 17 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1316,56 +1316,35 @@ Examples of working with datetime objects:
13161316

13171317
Using datetime with tzinfo:
13181318

1319-
>>> from datetime import timedelta, datetime, tzinfo
1320-
>>> class TZ1(tzinfo):
1319+
>>> from datetime import timedelta, datetime, tzinfo, timezone
1320+
>>> class KabulTz(tzinfo):
1321+
... # Kabul used +4 until 1045, when they moved to +4:30
13211322
... def utcoffset(self, dt):
1322-
... return timedelta(hours=1) + self.dst(dt)
1323-
... def dst(self, dt):
1324-
... # DST starts last Sunday in March
1325-
... d = datetime(dt.year, 4, 1) # ends last Sunday in October
1326-
... self.dston = d - timedelta(days=d.weekday() + 1)
1327-
... d = datetime(dt.year, 11, 1)
1328-
... self.dstoff = d - timedelta(days=d.weekday() + 1)
1329-
... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
1330-
... return timedelta(hours=1)
1323+
... if dt.year >= 1945:
1324+
... return timedelta(hours=4, minutes=30)
13311325
... else:
1332-
... return timedelta(0)
1333-
... def tzname(self,dt):
1334-
... return "UTC +2" if self.dst(dt) else "UTC +1"
1335-
...
1336-
>>> class TZ2(tzinfo):
1337-
... def utcoffset(self, dt):
1338-
... return timedelta(hours=2) + self.dst(dt)
1326+
... return timedelta(hours=4)
13391327
... def dst(self, dt):
1340-
... d = datetime(dt.year, 4, 1)
1341-
... self.dston = d - timedelta(days=d.weekday() + 1)
1342-
... d = datetime(dt.year, 11, 1)
1343-
... self.dstoff = d - timedelta(days=d.weekday() + 1)
1344-
... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
1345-
... return timedelta(hours=1)
1346-
... else:
13471328
... return timedelta(0)
13481329
... def tzname(self,dt):
1349-
... return "UTC +3" if self.dst(dt) else "UTC +2"
1330+
... return "Asia/Kabul"
13501331
...
1351-
>>> tz1 = TZ1()
1352-
>>> # Daylight Saving Time
1353-
>>> dt1 = datetime(2006, 11, 21, 16, 30, tzinfo=tz1)
1354-
>>> dt1.dst()
1355-
datetime.timedelta(0)
1332+
...
1333+
>>> tz1 =KabulTz()
1334+
>>> # Datetime before the change
1335+
>>> dt1 = datetime(1900, 11, 21, 16, 30, tzinfo=tz1)
13561336
>>> dt1.utcoffset()
1357-
datetime.timedelta(seconds=3600)
1337+
datetime.timedelta(0, 14400)
1338+
>>> # Datetime after the change
13581339
>>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=tz1)
1359-
>>> dt2.dst()
1360-
datetime.timedelta(seconds=3600)
13611340
>>> dt2.utcoffset()
1362-
datetime.timedelta(seconds=7200)
1341+
datetime.timedelta(0, 16200)
13631342
>>> # Convert datetime to another time zone
1364-
>>> dt3 = dt2.astimezone(TZ2())
1343+
>>> dt3 = dt2.astimezone(timezone.utc)
13651344
>>> dt3 # doctest: +ELLIPSIS
1366-
datetime.datetime(2006, 6, 14, 14, 0, tzinfo=<TZ2 object at 0x...>)
1345+
datetime.datetime(2006, 6, 14, 8, 30, tzinfo=datetime.timezone.utc)
13671346
>>> dt2 # doctest: +ELLIPSIS
1368-
datetime.datetime(2006, 6, 14, 13, 0, tzinfo=<TZ1 object at 0x...>)
1347+
datetime.datetime(2006, 6, 14, 13, 0, tzinfo=<KabulTz object at 0x...>)
13691348
>>> dt2.utctimetuple() == dt3.utctimetuple()
13701349
True
13711350

0 commit comments

Comments
 (0)