À propos de la date et du fuseau horaire Python

J'étais confus quand je traitais de la date / heure avec le fuseau horaire à l'esprit, donc je vais le résumer pour moi-même.

Naive,Aware

Les objets de date et d'heure en Python sont classés dans les deux types suivants. La différence approximative est «avec ou sans informations de fuseau horaire».

Par conséquent, si vous souhaitez effectuer un traitement tenant compte du fuseau horaire dans certains programmes, vous devez utiliser l'objet Aware.

objet

Il y a quatre objets principaux ci-dessous.

Selon la façon dont chaque objet est créé, il peut être naïf ou conscient. Par exemple

>>> print('Python %s on %s' % (sys.version, sys.platform))
Python 3.7.4 (default, Oct 10 2019, 12:40:25) 
[Clang 10.0.1 (clang-1001.0.46.4)] on darwin

>>> import datetime
>>> aware_dt = datetime.datetime.now(tz=datetime.timezone.utc)
>>> aware_dt
datetime.datetime(2020, 4, 4, 5, 49, 51, 291393, tzinfo=datetime.timezone.utc)
>>> naive_dt = datetime.datetime.utcnow()
>>> naive_dt
datetime.datetime(2020, 4, 4, 5, 50, 8, 499521)
>>> aware_dt.tzinfo
datetime.timezone.utc
>>> print(naive_dt.tzinfo)
<class 'NoneType'>

Lors de la création de l'heure actuelle utc en tant qu'objet, il existe une méthode de spécification du fuseau horaire et une méthode de non.

Méthodes liées à l'objet datetime

strptime

Méthode qui transforme une chaîne de caractères représentant une date de type datetime.

>>> str_dt = '2020-3-01 10:11:12'
>>> strp_dt = datetime.datetime.strptime(str_dt, "%Y-%m-%d %H:%M:%S")
>>> strp_dt
datetime.datetime(2020, 3, 1, 10, 11, 12)
>>> print(type(strp_dt.tzinfo))
<class 'NoneType'>

L'objet créé ne contient pas d'attributs de fuseau horaire. Cependant, si la chaîne de caractères avant la conversion contient un fuseau horaire et que le format est défini de manière appropriée

>>> str_dt_utc = '2020-3-01 10:11:12+00:00'
>>> strp_dt_utc = datetime.datetime.strptime(str_dt_utc, "%Y-%m-%d %H:%M:%S%z")
>>> strp_dt_utc
datetime.datetime(2020, 3, 1, 10, 11, 12, tzinfo=datetime.timezone.utc)
>>> str_dt_jst = '2020-3-01 10:11:12+09:00'
>>> strp_dt_jst = datetime.datetime.strptime(str_dt_jst, "%Y-%m-%d %H:%M:%S%z")
>>> strp_dt_jst
datetime.datetime(2020, 3, 1, 10, 11, 12, tzinfo=datetime.timezone(datetime.timedelta(seconds=32400)))

Il semble qu'un objet datetime est créé avec l'attribut de fuseau horaire défini comme dans.

astimezone

Méthode qui convertit un objet datetime en fonction des informations de fuseau horaire spécifiées.

>>> strp_dt.astimezone(datetime.timezone.utc)
datetime.datetime(2020, 3, 1, 1, 11, 12, tzinfo=datetime.timezone.utc)

La différence d'heure entre JST et UTC, -9 heures, a été reflétée et l'objet datetime avec tzinfo ajouté a été renvoyé. (S'agit-il d'une comparaison avec le fuseau horaire local?)

replace

Méthode qui convertit le fuseau horaire d'un objet datetime en fuseau horaire spécifié.

>>> strp_dt.replace(tzinfo=datetime.timezone.utc)
datetime.datetime(2020, 3, 1, 10, 11, 12, tzinfo=datetime.timezone.utc)

Notez que seul tzinfo est converti par rapport à astimezone.

Concernant la création de l'objet fuseau horaire, vous pouvez simplement le créer comme datetime.timezone (timedelta (heures = + 9), 'JST'), ou utiliser un module tiers (pytz, dateutil). Il existe différentes méthodes.

Recommended Posts

À propos de la date et du fuseau horaire Python
À propos des objets et des classes Python
À propos des variables et des objets Python
À propos de Python, len () et randint ()
À propos de Python et des expressions régulières
À propos des opérations Python et OS
Python # À propos de la référence et de la copie
À propos de Python sort () et reverse ()
À propos de _ et __
À propos de Python dict et des fonctions triées
À propos de Python et Cython dtype
À propos de Python Pickle (cPickle) et Marshal
[Python] À propos des classes Executor et Future
À propos de Python, à partir et à l'importation, comme
À propos des tranches Python
À propos de la notation d'inclusion de python
À propos de Python tqdm.
À propos de python, classe
À propos de l'héritage Python
À propos de python, range ()
À propos de Python Decorator
Gestion des fuseaux horaires Python
Une histoire sur Python pop and append
À propos de la référence Python
À propos des décorateurs Python
[Python] À propos du multi-processus
Parler d'anciennes et de nouvelles classes en Python
Parler des attributs de classe Python et des métaclasses
Pensez aux recherches de priorité de profondeur et de priorité de largeur en Python
À propos de la différence entre "==" et "is" en python
[Python3] Lecture et écriture avec isoformat datetime avec json
Une histoire sur la modification de Python et l'ajout de fonctions
[Python] En savoir plus sur la programmation asynchrone et les boucles d'événements
À propos des copies superficielles et profondes de Python / Ruby
[Python] Type de classe et utilisation du module datetime
[Python] Comment comparer la date / heure avec le fuseau horaire ajouté
[python] Compresser et décompresser
À propos de Python for loop
À propos de la classe et de l'instance
À propos des arguments de fonction (python)
Astuces Python et Numpy
[Python] pip et roue
Itérateur et générateur Python
Paquets et modules Python
Intégration Vue-Cli et Python
Ruby, Python et carte
À propos de cumprod et cummax
À propos de Python, pour ~ (plage)
entrée et sortie python
[Python] Mémo sur les erreurs
Python et Ruby se séparent
À propos de l'environnement de développement Python
Python: à propos des arguments de fonction
Python, à propos de la gestion des exceptions
conversion de date / heure <-> python unix-time
À propos de Python Pyramid Traversal
À propos de Python3 ... (objet Ellipsis)