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.
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.
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
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
.
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.
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
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