Saltar al contenido

Cómo convertir la hora local string a UTC?

Presta atención porque en esta división vas a hallar la respuesta que buscas.Este tutorial fue evaluado por nuestros especialistas para asegurar la calidad y veracidad de nuestro post.

Solución:

Primero, analice el string en un objeto de fecha y hora ingenuo. Esta es una instancia de datetime.datetime sin información de zona horaria adjunta. Consulte su documentación.

Utilizar el pytz módulo, que viene con una lista completa de zonas horarias + UTC. Averigüe cuál es la zona horaria local, construya un objeto de zona horaria a partir de él, y manipúlelo y adjúntelo a la fecha y hora ingenua.

Finalmente, use datetime.astimezone() método para convertir la fecha y hora a UTC.

Código fuente, utilizando la zona horaria local “America / Los_Angeles”, para el string “2001-2-3 10:11:12”:

from datetime import datetime   
import pytz

local = pytz.timezone("America/Los_Angeles")
naive = datetime.strptime("2001-2-3 10:11:12", "%Y-%m-%d %H:%M:%S")
local_dt = local.localize(naive, is_dst=None)
utc_dt = local_dt.astimezone(pytz.utc)

A partir de ahí, puede utilizar el strftime() método para formatear la fecha y hora UTC según sea necesario:

utc_dt.strftime("%Y-%m-%d %H:%M:%S")

NOTA – A partir de 2020 no debería utilizar .utcnow() o .utcfromtimestamp(xxx). Como presumiblemente ha pasado a python3, debería utilizar objetos de fecha y hora que reconozcan la zona horaria.

>>> from datetime import timezone
>>> dt_now = datetime.now(tz=timezone.utc)
>>> dt_ts = datetime.fromtimestamp(1571595618.0, tz=timezone.utc)

para obtener más información, consulte: https://blog.ganssle.io/articles/2019/11/utcnow.html

respuesta original (de 2010):

La función utcnow () del módulo de fecha y hora se puede utilizar para obtener la hora UTC actual.

>>> import datetime
>>> utc_datetime = datetime.datetime.utcnow()
>>> utc_datetime.strftime("%Y-%m-%d %H:%M:%S")
'2010-02-01 06:59:19'

Como dice el enlace mencionado anteriormente por Tom: http://lucumr.pocoo.org/2011/7/15/eppur-si-muove/:

UTC es una zona horaria sin horario de verano y sigue siendo una zona horaria sin cambios de configuración en el pasado.

Siempre mida y almacene la hora en UTC.

Si necesita registrar dónde se tomó el tiempo, guárdelo por separado.
No almacenar la información de la hora local + zona horaria!

NOTA – Si alguno de sus datos se encuentra en una región que usa DST, use pytz y eche un vistazo a la respuesta de John Millikin.

Si desea obtener la hora UTC de un determinado string y tiene la suerte de estar en una región del mundo que no usa DST, o tiene datos que solo están desplazados de UTC sin DST aplicado:

-> utilizando la hora local como base para el valor de compensación:

>>> # Obtain the UTC Offset for the current system:
>>> UTC_OFFSET_TIMEDELTA = datetime.datetime.utcnow() - datetime.datetime.now()
>>> local_datetime = datetime.datetime.strptime("2008-09-17 14:04:00", "%Y-%m-%d %H:%M:%S")
>>> result_utc_datetime = local_datetime + UTC_OFFSET_TIMEDELTA
>>> result_utc_datetime.strftime("%Y-%m-%d %H:%M:%S")
'2008-09-17 04:04:00'

-> O, desde un desplazamiento conocido, usando datetime.timedelta ():

>>> UTC_OFFSET = 10
>>> result_utc_datetime = local_datetime - datetime.timedelta(hours=UTC_OFFSET)
>>> result_utc_datetime.strftime("%Y-%m-%d %H:%M:%S")
'2008-09-17 04:04:00'

ACTUALIZAR:

Desde python 3.2 datetime.timezone está disponible. Puede generar un objeto de fecha y hora que tenga en cuenta la zona horaria con el siguiente comando:

import datetime

timezone_aware_dt = datetime.datetime.now(datetime.timezone.utc)

Si está listo para asumir conversiones de zona horaria, lea esto:

https://medium.com/@eleroy/10-things-you-need-to-know-about-date-and-time-in-python-with-datetime-pytz-dateutil-timedelta-309bfbafb3f7

Gracias @rofly, la conversión completa de string a string es como sigue:

time.strftime("%Y-%m-%d %H:%M:%S", 
              time.gmtime(time.mktime(time.strptime("2008-09-17 14:04:00", 
                                                    "%Y-%m-%d %H:%M:%S"))))

Mi resumen de la time/calendar funciones:

time.strptime
string -> tupla (sin zona horaria aplicada, por lo que coincide string)

time.mktime

tupla de hora local -> segundos desde época (siempre hora local)

time.gmtime

segundos desde época -> tupla en UTC

y

calendar.timegm

tupla en UTC -> segundos desde época

time.localtime

segundos desde época -> tupla en la zona horaria local

Aquí tienes las reseñas y valoraciones

Si piensas que te ha resultado útil nuestro artículo, agradeceríamos que lo compartas con el resto juniors de esta manera contrubuyes a dar difusión a este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *