mexico python timezone utc pytz

python - mexico - pytz-Conversión de UTC y zona horaria a hora local



pytz timezone mexico (6)

Tengo una datetime y datetime en la zona horaria utc, por ejemplo:

utc_time = datetime.datetime.utcnow()

Y un objeto de zona horaria pytz:

tz = timezone(''America/St_Johns'')

¿Cuál es la forma correcta de convertir utc_time a la zona horaria dada?


¿Puedo recomendar usar la flecha ? Si entendí la pregunta:

>>> import arrow >>> utc = arrow.utcnow() >>> utc <Arrow [2014-08-12T13:01:28.071624+00:00]> >>> local = utc.to("America/St_Johns") >>> local <Arrow [2014-08-12T10:31:28.071624-02:30]>

También puedes usar

tz.fromutc(utc_time)


Otra forma muy sencilla:

Como el método utcnow devuelve un objeto ingenuo , debe convertir el objeto ingenuo en objeto consciente . Usando el método de replace puede convertir un objeto ingenuo en un objeto consciente . Luego puede usar el método astimezone para crear un nuevo objeto datetime en una zona horaria diferente.

from datetime import datetime import pytz utc_time = datetime.utcnow() tz = pytz.timezone(''America/St_Johns'') utc_time =utc_time.replace(tzinfo=pytz.UTC) #replace method st_john_time=utc_time.astimezone(tz) #astimezone method print(st_john_time)


Creo que lo tengo:

pytz.utc.localize(utc_time, is_dst=None).astimezone(tz)

Esta línea primero convierte el objeto datetime utc_time ingenuo (zona horaria desconocida) en un objeto datetime que contiene una zona horaria (UTC). Luego utiliza la función astimezone para ajustar el tiempo de acuerdo con la zona horaria solicitada.


Es el propósito exacto de la función fromutc :

tz.fromutc(utc_time)

(la función as_timezone llama fromutc bajo el capó, pero primero intenta convertir a UTC, lo que no es necesario en su caso)


Estoy de acuerdo con la respuesta de Tzach. Solo quería incluir que el parámetro is_dst no es obligatorio:

pytz.utc.localize(datetime.utcnow()).astimezone(tz)

Ese código convierte la hora UTC actual a una hora actual con fecha actual.

Mientras que el código a continuación da a las conversiones la hora UTC actual a una fecha y hora de fecha estimada que no es necesariamente actual. La zona horaria se anexa al valor de tiempo UTC.

tz.localize(datetime.utcnow())


También puede usar la muestra a continuación, la uso para una tarea similar

tz = pytz.timezone(''America/St_Johns'') time_difference=tz.utcoffset(utc_time).total_seconds() #time difference between UTC and local timezones in 5:30:00 format utc_time = date + timedelta(0,time_difference)

Funciona rápido y no necesita importar bibliotecas adicionales.