Als ich versuchte, datetime (bewusst) mit Zeitzone und datetime (naiv) ohne Zeitzone in Python zu vergleichen, trat ein Fehler auf, sodass ich die Lösung zusammenfasste.
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.6
BuildVersion: 19G2021
$ python3 --version
Python 3.7.3
Wenn Sie einfach vergleichen, ohne die Zeitzoneninformationen an die Datums- / Uhrzeitfunktion zu übergeben
$ cat sample.py
#!/usr/bin/env python3
from datetime import datetime, timedelta, timezone
def main():
now = datetime.now()
a_day_ago = datetime.now() - timedelta(days=1)
print('success') if now > a_day_ago else print('failure')
if __name__ == '__main__':
main()
Ich konnte ohne Probleme vergleichen
$ python3 sample.py
success
Ich werde jedoch die Zeitzoneninformationen an eine Seite weitergeben (bewusst)
tz = timezone(timedelta(hours=+9), 'Asia/Tokyo')
now = datetime.now(tz)
a_day_ago = datetime.now() - timedelta(days=1)
print('success') if now > a_day_ago else print('failure')
Ich habe einen Fehler bekommen.
$ python3 sample.py
Traceback (most recent call last):
File "sample.py", line 23, in <module>
main()
File "sample.py", line 18, in main
print('success') if now > a_day_ago else print('failure')
TypeError: can't compare offset-naive and offset-aware datetimes
Es scheint, dass Python datetime eine Zeitzone (bewusst) und keine Zeitzone (naiv) hat.
Übrigens beim Vergleich von Personen mit Zeitzonen
tz = timezone(timedelta(hours=+9), 'Asia/Tokyo')
now = datetime.now(tz)
a_day_ago = datetime.now(tz) - timedelta(days=1)
print('success') if now > a_day_ago else print('failure')
Ich konnte ohne Probleme vergleichen.
$ python3 sample.py
success
Auch wenn Sie es in einer anderen Zeitzone versuchen
tz_tokyo = timezone(timedelta(hours=+9), 'Asia/Tokyo')
now = datetime.now(tz_tokyo)
tz_shanghai = timezone(timedelta(hours=+8), 'Asia/Shanghai')
a_day_ago = datetime.now(tz_shanghai) - timedelta(days=1)
print('success') if now > a_day_ago else print('failure')
Ich konnte ohne Probleme vergleichen.
$ python3 sample.py
success
Wenn Sie sich bei datetime der Existenz von Zeitzonen bewusst sind, haben Sie keine Probleme beim Vergleichen.
Recommended Posts