[Python] Comment comparer la date / heure avec le fuseau horaire ajouté

Aperçu

Lorsque j'ai essayé de comparer datetime (conscient) avec le fuseau horaire et datetime (naïf) sans fuseau horaire en Python, une erreur s'est produite, j'ai donc résumé la solution.

environnement

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

$ python3 --version
Python 3.7.3

Comparaison

Si vous comparez simplement sans transmettre les informations de fuseau horaire à la fonction datetime

$ 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()

J'ai pu comparer sans problème

$ python3 sample.py
success

Cependant, je passerai les informations de fuseau horaire d'un côté (conscient)

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')

J'ai une erreur.

$ 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

Il semble que Python datetime ait un fuseau horaire (conscient) et un fuseau non horaire (naïf).

À propos, lorsque vous comparez des personnes avec des fuseaux horaires

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')

J'ai pu comparer sans problème.

$ python3 sample.py
success

Même si vous l'essayez dans un fuseau horaire différent

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')

J'ai pu comparer sans problème.

$ python3 sample.py
success

Avec datetime, si vous êtes conscient de l'existence de fuseaux horaires, vous n'aurez aucun problème à comparer.

Recommended Posts

[Python] Comment comparer la date / heure avec le fuseau horaire ajouté
Python: comment utiliser async avec
Comment démarrer avec Python
[Python] Comment utiliser la liste 3 Ajouté
Comment calculer la date avec python
Comment utiliser BigQuery en Python
Comment faire un test de sac avec python
Comment afficher le japonais python avec lolipop
Comment entrer le japonais avec les malédictions Python
Comment installer python3 avec docker centos
Comment lire un fichier CSV avec Python 2/3
Comment profiter de la programmation avec Minecraft (Ruby, Python)
[REAPER] Comment jouer à Reascript avec Python
Comment faire un traitement parallèle multicœur avec python
Comment installer Python
Stratégie sur la façon de monétiser avec Python Java
[Python] Comment dessiner plusieurs graphiques avec Matplotlib
[Python] Comment lire des fichiers Excel avec des pandas
Comment recadrer une image avec Python + OpenCV
Comment installer python
Comment spécifier des attributs avec Mock of Python
Comment mesurer le temps d'exécution avec Python Partie 1
Comment utiliser tkinter avec python dans pyenv
[Python] Comment gérer les caractères japonais avec openCV
Comment gérer le type datetime dans sqlite3 de python
Comment mesurer le temps d'exécution avec Python, partie 2
Remarque: Comment obtenir le dernier jour du mois avec python (ajouté le premier jour du mois)
Comment convertir / restaurer une chaîne avec [] en python
Comment ajouter de l'aide à HDA (avec bonus de script Python)
[Python] Comment dessiner un graphique linéaire avec Matplotlib
Comment récupérer des données d'image de Flickr avec Python
Comment faire un calcul de hachage avec Salt en Python
[Introduction à Python] Comment itérer avec la fonction range?
Expliquez en détail comment créer un son avec python
Comment exécuter des tests avec Python unittest
[Python] Comment spécifier l'emplacement de téléchargement avec youtube-dl
Comment mesurer le temps de lecture d'un fichier mp3 avec python
Comment utiliser le mode interactif python avec git bash
Comment convertir un fichier JSON en fichier CSV avec Python Pandas
Comment télécharger avec Heroku, Flask, Python, Git (Partie 1)
[Python] Comment gérer l'erreur de lecture pandas read_html
Comment télécharger avec Heroku, Flask, Python, Git (Partie 2)
[Python] Comment réécrire le style de table avec python-pptx [python-pptx]
Comment passer en mode smartphone avec Python + Selenium + Chrome
Comment faire fonctionner l'API Discord avec Python (enregistrement de bot)
[Python] Comment dessiner un diagramme de dispersion avec Matplotlib
[2020.8 dernière] Comment installer Python
python3: Comment utiliser la bouteille (2)
[Python] Comment utiliser la liste 1
Connectez-vous à Wikipedia avec Python
Comment mettre à jour Tkinter de Python vers la version 8.6
Publiez sur Slack avec Python 3
Comment utiliser Python Argparse
Comment mettre à jour avec SQLAlchemy?
Comment lancer avec Theano
À propos de la date et du fuseau horaire Python
Python: comment utiliser pydub
[Python] Comment utiliser checkio
Comment exécuter Notepad ++ Python