J'ai une date et j'ai besoin de le rendre conscient du fuseau horaire.
local_tz = timezone('Asia/Tokyo')
start_date = '2012-09-27'
start_date = datetime.strptime(start_date, "%Y-%m-%d")
start_date = start_date.astimezone(local_tz)
now_utc = datetime.now(timezone('UTC'))
local_now = now_utc.astimezone(local_tz)
J'ai besoin de savoir si c'est vrai:
print start_date>local_now
Mais je reçois cette erreur.
start_date = start_date.astimezone(local_tz)
ValueError: astimezone() cannot be applied to a naive datetime
Je convertis utc à tokyo sans problème. Je dois bien préparer start_date au fuseau horaire à Tokyo.
Merci
Pour les fuseaux horaires pytz
, utilisez leur méthode .localize()
pour transformer un objet datetime
naïf en un avec un fuseau horaire:
start_date = local_tz.localize(start_date)
Pour les fuseaux horaires sans transition DST, la méthode .replace()
pour associer un fuseau horaire à un objet naïf datetime
devrait également fonctionner:
start_date = start_date.replace(tzinfo=local_tz)
Voir le arithmétique des heures et des dates localisées de la documentation de pytz pour plus de détails.
Vous pouvez utiliser local_tz.localize(naive_dt, is_dst=None)
pour convertir un objet datetime naïf en un objet prenant en compte le fuseau horaire.
from datetime import datetime
import pytz
local_tz = pytz.timezone('Asia/Tokyo')
start_date = local_tz.localize(datetime(2012, 9, 27), is_dst=None)
now_utc = datetime.utcnow().replace(tzinfo=pytz.utc)
print start_date > now_utc
is_dst=None
force .localize () à déclencher une exception si l'heure locale est ambiguë.
Si vous utilisez Django Rest Framework, vous pouvez redéfinir la classe DateTimeField de la manière suivante:
class DateTimeFieldOverridden(serializers.DateTimeField):
def to_representation(self, value):
local_tz = pytz.timezone(TIME_ZONE)
value = local_tz.localize(value)
return super(DateTimeFieldOverridden, self).to_representation(value)
Et vous l'utilisez comme ça dans votre sérialiseur:
date_time = DateTimeFieldOverridden(format='%d-%b-%Y', read_only=True)
J'espère que ça aide quelqu'un.