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.
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.6
BuildVersion: 19G2021
$ python3 --version
Python 3.7.3
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