Obtenez la date et l'heure actuelles en Python, en tenant compte du décalage horaire

À propos de cet article

Dans cet article, j'ai écrit sur la façon d'obtenir la date et l'heure actuelles en Python, en tenant compte du décalage horaire. J'ai noté comment cela fonctionne à la fois dans Python2 et Python3, en utilisant uniquement le module standard (datetime).

La description détaillée des différentes méthodes et objets du module datetime est omise.

Déclencheur

J'implémentais une application Web en Python et j'essayais de l'exécuter sur Heroku. J'essaie de mettre en œuvre une fonctionnalité et j'ai besoin d'obtenir la date et l'heure actuelles.

Si vous essayez simplement d'obtenir l'heure actuelle, vous obtenez l'heure système du serveur Heroku. Sur le serveur Heroku, l'heure du système s'exécute à +00: 00 (UTC).

Alors que faire si vous exécutez simplement l'application au Japon et utilisez simplement l'heure système d'Heroku? Lorsque la fonction est activée par l'application et que l'heure est acquise, il sera 12h00, heure du Japon. Ensuite, l'heure système d'Heroku est 3h00. L'heure du Japon est 12h00, mais l'application la traite à 3h00.

Hmmm, ce n'est pas bon ... (Surtout pour les calendriers et les rappels.) Si vous ajoutez simplement 9 heures, cela sera résolu immédiatement, mais je veux m'assurer que la date et l'heure exactes sont renvoyées sans dépendre du paramètre de fuseau horaire du serveur.

procédure

Tout d'abord, je vais vous montrer tout le code qui fonctionne pour le moment.

import datetime

# UTC (Accord temps du monde)Obtenez le temps de
time_now_utc = datetime.datetime.utcnow()
print(time_now_utc)
# 2020-10-10 14:51:22.910110

#Le Japon a 9 heures d'avance sur UTC
time_dt_ja = datetime.timedelta(hours=9)
print(time_dt_ja)
# 9:00:00

#Si vous ajoutez 9 heures à UTC, ce sera l'heure du Japon.
time_now_ja = time_now_utc + time_dt_ja
print(time_now_ja)
# 2020-10-10 23:51:22.910110

1. Tout d'abord, obtenez l'UTC (Accord World Time)

Si vous obtenez la date et l'heure avec datetime.datetime.utcnow (), vous obtiendrez le même résultat (UTC), que le fuseau horaire de la machine en cours d'exécution soit le Japon, le Royaume-Uni ou les États-Unis. (S'il s'agit de datetime.datetime.now (), le résultat changera en fonction du réglage du fuseau horaire de la machine en fonctionnement.) Tout d'abord, cela remplira les différences dans les paramètres de fuseau horaire des machines en fonctionnement.

time_now_utc = datetime.datetime.utcnow()

print(time_now_utc)
# 2020-10-10 14:51:22.910110

type(time_now_utc)
# <class 'datetime.datetime'>

Ici, vous obtenez l'objet datetime.

2. Ensuite, préparez le calcul pour appliquer le décalage horaire

timedelta Préparez l'objet. L'objet datetime est l'objet ** time information **, et le timedelta est l'objet ** time information **.

time_dt_test = datetime.timedelta(days=1, seconds=1, microseconds=1, milliseconds=1, minutes=1, hours=1, weeks=1)

print(time_dt_test)
# 8 days, 1:01:01.001001

type(time_dt_test)
# <class 'datetime.timedelta'>

Si vous spécifiez le jour (semaine, jour) ou l'heure (heure, minute, seconde) de cette manière, il sera converti en informations de jour et d'heure.

3. Enfin calculer

Les objets datetime et timedelta peuvent être utilisés avec + -. En ajoutant 9 heures à UTC, il devient l'heure du Japon, donc

time_now_ja = time_now_utc + time_dt_ja

print(time_now_ja)
# 2020-10-10 23:51:22.910110

Après cela, utilisez la méthode datetime comme approprié.

print(time_now_ja.strftime("%Y année%m mois%jour j"))
#10 octobre 2020

Concernant strftime (), il semble qu'il existe divers codes de format ainsi que % Y,% d, % m. Voir la documentation officielle pour plus de détails https://docs.python.org/ja/3/library/datetime.html#strftime-strptime-behavior

De côté

Selon la documentation officielle, obtenir l'UTC est mieux que datetime.datetime.utcnow () datetime.datetime.now (datetime.timezone.utc) semble être recommandé.

https://docs.python.org/ja/3/library/datetime.html

Cependant, il semble qu'il n'y ait pas d'objet timezone dans Python2.

(Mais la relation de fuseau horaire est probablement beaucoup plus intelligente à implémenter en utilisant l'objet timezone.)

Recommended Posts

Obtenez la date et l'heure actuelles en Python, en tenant compte du décalage horaire
Comment obtenir la différence de date et d'heure en secondes avec Python
Obtenez et convertissez l'heure actuelle dans le fuseau horaire local du système avec python
Obtenir la date et l'heure au format spécifié
Déterminez le format de la date et de l'heure avec Python et convertissez-le en Unixtime
Obtenir la date en Python
python Obtenir l'heure actuelle
Obtenez le titre et la date de livraison de Yahoo! News en Python
À propos de la différence entre "==" et "is" en python
Pour représenter la date, l'heure, l'heure et les secondes en Python
Trouver des erreurs en Python
Convertir la date et l'heure zonées en temps Unixtime dans Python2.7
Extraire "date actuelle uniquement" et "date et heure actuelles" avec python datetime.
Convertir le fuseau horaire de la date (décalage horaire) avec Python (à partir de la chaîne)
Obtenir les informations de localisation actuelles et l'agent utilisateur en Python
Différence entre list () et [] en Python
Différence entre == et est en python
Obtenez le chemin du bureau en Python
Obtenez le type MIME en Python et déterminez le format de fichier
Obtenez le chemin du script en Python
[Python] Afficher le temps écoulé en heures, minutes et secondes (00:00:00)
Obtenez le chemin du bureau en Python
Obtenez le nom d'hôte en Python
Remarque Python: obtenez le mois en cours
Différence entre @classmethod et @staticmethod en Python
Différence entre append et + = dans la liste Python
Différence entre non local et global en Python
Obtenir l'heure actuelle JST en notation ISO8601
Test de l'heure actuelle Pytest (date et heure fixes)
Obtenir la liste de codes EDINET en Python
Exemple de code pour obtenir oauth_token et oauth_token_secret de l'API Twitter en Python 2.7
Obtenez une instance datetime à tout moment de la journée en Python
Comment arrêter le programme jusqu'à une date et une heure spécifiques en python
Obtenez des données de séries chronologiques de k-db.com avec Python
[Python] Récupérez les fichiers dans le dossier avec Python
Obtenez la météo à Osaka via l'API Web (python)
Récupérer l'appelant d'une fonction en Python
[python] Différence entre variable et self. Variable dans la classe
Obtenez le titre de la fenêtre du système X Window en Python
[Python] Obtenez la dernière date de mise à jour du site Web
Obtenez la date de mise à jour du fichier de mémorandum Python.
Obtenir l'heure Unix de l'heure spécifiée par JST quel que soit le fuseau horaire du serveur avec Python
Je veux obtenir le nom du fichier, le numéro de ligne et le nom de la fonction dans Python 3.4
Obtenez le dernier élément du tableau en fractionnant les chaînes en Python et PHP
Manipulation de date en Python
[Python3] Obtenez la différence de date
Calculer la date avec python
Obtenez date avec python
[Python] Fractionner la date
Calculer les dates en Python
Comment obtenir le nom de la variable lui-même en python
Le mémo Python le plus simple au Japon (classes et objets)
Recevez le formulaire en Python et faites diverses choses
Comment obtenir le nombre de chiffres en Python
Comment connaître le répertoire actuel en Python dans Blender
[Python] Mesure et affiche le temps nécessaire au traitement
[Python] Obtenez les nombres dans l'image graphique avec OCR
Affiche l'heure à partir du moment où le programme a été lancé en python
[python] Récupère la liste des classes définies dans le module
Différence entre Ruby et Python en termes de variables
Obtenez une sortie standard en temps réel avec le sous-processus Python