अजगर 3.9.1 डेटाइम अंकगणित
Dec 03 2020
Python3.9.1 में नए ज़ोनइन्फो सपोर्ट की कोशिश करते हुए, मैंने देखा कि डेटाइम अवगत वस्तुओं के समय के अंतर pytz द्वारा उत्पादित उन लोगों से भिन्न होते हैं जैसा कि नीचे दिए गए कार्यक्रम के आउटपुट द्वारा दिखाया गया है:
import datetime,zoneinfo,pytz
from sys import version_info
print(f'Python{version_info.major}.{version_info.minor}{version_info.micro}'
f' pytz{pytz.__version__}')
Athens=zoneinfo.ZoneInfo('Europe/Athens')
f='%Y-%m-%d %H:%M:%S'
d=[datetime.datetime.strptime('2020-10-25 00:00:00',f),
datetime.datetime.strptime('2020-10-25 23:59:59',f)]
print('naive ',d[1]-d[0])
d=[x.astimezone(Athens) for x in d]
print('zoneinfo',d[1]-d[0])
d=[datetime.datetime.strptime('2020-10-25 00:00:00',f),
datetime.datetime.strptime('2020-10-25 23:59:59',f)]
athens=pytz.timezone('Europe/Athens')
print('pytz as ',d[1].astimezone(athens)-d[0].astimezone(athens))
print('pytz loc',athens.localize(d[1])-athens.localize(d[0]))
Python3.91 pytz2020.4
naive 23:59:59
zoneinfo 23:59:59
pytz as 1 day, 0:59:59
pytz loc 1 day, 0:59:59
ऐसा प्रतीत होता है कि देशी टाइमज़ोन इस तथ्य की अनदेखी करता है कि 2020-10-25 गर्मियों के समय से सर्दियों के समय में बदलाव का दिन था और इसलिए उस दिन की अवधि 25 घंटे थी। मैं क्या खो रहा हूँ?
जवाब
MrFuppes Dec 03 2020 at 20:11
मेरी टिप्पणी का एक चित्रण; एक दीवार के समय के समय tzinfo
से zoneinfo
रिटर्न के साथ एक जोनइन्फो के साथ सेट के साथ जागरूक डाइमटाइम । यदि आप pytz.timezone
जागरूक डेटाटाइम के साथ भी ऐसा करते हैं , तो आपको पूर्ण समयबद्धता प्राप्त होती है।
from datetime import datetime
from zoneinfo import ZoneInfo
import pytz
from sys import version_info
print(f'Python {version_info.major}.{version_info.minor}{version_info.micro} pytz {pytz.__version__}')
# Python 3.90 pytz 2020.4
d=[datetime.fromisoformat('2020-10-25 00:00:00'), datetime.fromisoformat('2020-10-25 23:59:59')]
Athens = ZoneInfo('Europe/Athens')
print('wall time diff, zoneinfo:', d[1].replace(tzinfo=Athens)-d[0].replace(tzinfo=Athens))
# wall time diff, zoneinfo: 23:59:59
athens = pytz.timezone('Europe/Athens')
print('absolute time diff, pytz:', athens.localize(d[1])-athens.localize(d[0]))
# absolute time diff, pytz: 1 day, 0:59:59
# to get absolute time delta with zoneinfo:
utc = ZoneInfo('UTC')
print('absolute time diff, zoneinfo:', d[1].replace(tzinfo=Athens).astimezone(utc)
-d[0].replace(tzinfo=Athens).astimezone(utc))
# absolute time diff, zoneinfo: 1 day, 0:59:59