[Python] Vergleichen von Datum und Uhrzeit mit der hinzugefügten Zeitzone

Überblick

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.

Umgebung

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.15.6
BuildVersion:	19G2021

$ python3 --version
Python 3.7.3

Vergleich

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

[Python] Vergleichen von Datum und Uhrzeit mit der hinzugefügten Zeitzone
Python: So verwenden Sie Async mit
Erste Schritte mit Python
[Python] Verwendung von Liste 3 Hinzugefügt
So berechnen Sie das Datum mit Python
So arbeiten Sie mit BigQuery in Python
Wie man einen Taschentest mit Python macht
So zeigen Sie Python-Japanisch mit Lolipop an
Wie man mit Python-Flüchen Japanisch eingibt
So installieren Sie Python3 mit Docker Centos
Lesen einer CSV-Datei mit Python 2/3
Wie man Spaß am Programmieren mit Minecraft hat (Ruby, Python)
[REAPER] Wie man Reascript mit Python spielt
So führen Sie eine Mehrkern-Parallelverarbeitung mit Python durch
So installieren Sie Python
Strategie zur Monetarisierung mit Python Java
[Python] Zeichnen mehrerer Diagramme mit Matplotlib
[Python] Wie man Excel-Dateien mit Pandas liest
So beschneiden Sie ein Bild mit Python + OpenCV
So installieren Sie Python
So legen Sie Attribute mit Mock of Python fest
So messen Sie die Ausführungszeit mit Python Teil 1
Wie man tkinter mit Python in Pyenv benutzt
[Python] Umgang mit japanischen Zeichen mit openCV
Wie man mit dem Datum / Uhrzeit-Typ in Pythons SQLite3 umgeht
So messen Sie die Ausführungszeit mit Python Part 2
Hinweis: So erhalten Sie den letzten Tag des Monats mit Python (hinzugefügt am ersten Tag des Monats)
So konvertieren / wiederherstellen Sie einen String mit [] in Python
So fügen Sie HDA Hilfe hinzu (mit Python-Skriptbonus)
[Python] Wie zeichnet man mit Matplotlib ein Liniendiagramm?
So kratzen Sie Bilddaten von Flickr mit Python
So führen Sie eine Hash-Berechnung mit Salt in Python durch
[Einführung in Python] Wie iteriere ich mit der Bereichsfunktion?
Erklären Sie ausführlich, wie Sie mit Python einen Sound erzeugen
So führen Sie Tests zusammen mit Python unittest aus
[Python] So legen Sie den Download-Speicherort mit youtube-dl fest
So messen Sie die Wiedergabezeit von MP3-Dateien mit Python
Verwendung des interaktiven Python-Modus mit Git Bash
So konvertieren Sie eine JSON-Datei mit Python Pandas in eine CSV-Datei
Hochladen mit Heroku, Flask, Python, Git (Teil 1)
[Python] Umgang mit Pandas read_html Lesefehler
Hochladen mit Heroku, Flask, Python, Git (Teil 2)
[Python] So schreiben Sie den Tabellenstil mit python-pptx um [python-pptx]
So wechseln Sie mit Python + Selenium + Chrome in den Smartphone-Modus
So bedienen Sie die Discord API mit Python (Bot-Registrierung)
[Python] Wie zeichnet man mit Matplotlib ein Streudiagramm?
[Neueste Version 2020.8] So installieren Sie Python
python3: Verwendung der Flasche (2)
[Python] Verwendung von Liste 1
Stellen Sie mit Python eine Verbindung zu Wikipedia her
So aktualisieren Sie Pythons Tkinter auf 8.6
Post to Slack mit Python 3
Wie benutzt man Python Argparse?
Wie aktualisiere ich mit SQLAlchemy?
Wie man mit Theano besetzt
Informationen zu Python-Datums- und Zeitzone
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
So führen Sie Notepad ++ Python aus