python - from - pytz y astimezone() no se pueden aplicar a un datetime ingenuo
timedelta python example (3)
Para las pytz
horarias de pytz
, use su método .localize()
para convertir un objeto de datetime
ingenuo en uno con una zona horaria:
start_date = local_tz.localize(start_date)
Para las zonas horarias sin una transición DST, el método .replace()
para adjuntar una zona horaria a un objeto de datetime
ingenuo normalmente también debería funcionar:
start_date = start_date.replace(tzinfo=local_tz)
Consulte la hora localizada y la aritmética de fecha de la documentación de pytz para obtener más detalles.
Tengo una fecha y necesito que sea consciente de la zona horaria.
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)
Necesito encontrar si esto es cierto:
print start_date>local_now
Pero me sale este error.
start_date = start_date.astimezone(local_tz)
ValueError: astimezone() cannot be applied to a naive datetime
Convierto utc a tokio sin problema. Necesito hacer que el anuncio de la zona horaria comience bien en tokyo.
Gracias
Podría usar local_tz.localize(naive_dt, is_dst=None)
para convertir un objeto de fecha y hora ingenuo en uno compatible con la zona horaria.
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
obliga a .localize () a generar una excepción si la hora local es ambigua.
Si está utilizando Django Rest Framework, podría anular la clase DateTimeField como:
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)
Y lo usas así en tu serializador:
date_time = DateTimeFieldOverridden(format=''%d-%b-%Y'', read_only=True)
Espero que esto ayude a alguien.