@@ -1316,56 +1316,35 @@ Examples of working with datetime objects:
13161316
13171317Using 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