es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python strptime analiza el formato de zona horaria “GMT+-H”

Estoy utilizando Python 3.7 y tratando de averiguar el formato correcto para que este código funcione.

dt = datetime.strptime("4 January 2022, 22:03 GMT-5", "%-d %b %Y, %H:%M %Zz")

La línea de arriba siempre falla. ¿Hay algo que pueda hacer para que funcione? Supongo que está fallando en la parte “GMT-5”.

Editar:
Agregando contexto, la cadena de entrada se extrae de un sitio web, por lo que necesito encontrar una forma de convertirla en un objeto de fecha y hora de Python para que mi código pueda comprender cuándo ocurrió el evento. No estoy seguro de cómo podría “en el código” cambiar la entrada para que coincida con el formato requerido de strptime.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que el especificador de formato %Zz espera una abreviatura de zona horaria en el formato de la base de datos Olson, como EST o UTC. Sin embargo, la cadena de entrada incluye un desplazamiento de zona horaria en el formato de GMT-5.

    Para solucionar esto, puedes usar la biblioteca pytz para crear un objeto timezone para el desplazamiento UTC, y luego usar el método strftime para formatear la cadena de entrada con la abreviatura de zona horaria correcta. Aquí tienes un ejemplo:

    import datetime
    import pytz
    
    offset = -5  # UTC-5
    timezone = pytz.FixedOffset(offset * 60)  # crear objeto timezone para el desplazamiento
    
    # formatear cadena de entrada con la abreviatura de zona horaria
    abbr = datetime.datetime.now(timezone).strftime('%Z')
    input_str = '4 de enero de 2022, 22:03 {}{:02d}'.format(abbr, -offset)
    
    # analizar cadena de entrada con el especificador de formato
    dt = datetime.datetime.strptime(input_str, '%-d %B %Y, %H:%M %Z%z')
    

    En este ejemplo, pytz.FixedOffset se usa para crear un objeto de zona horaria para el desplazamiento UTC en minutos, que es -300 para UTC-5. Luego, se utiliza el método strftime para formatear la hora actual en el objeto de zona horaria con el especificador de formato %Z, que devuelve la abreviatura de la zona horaria, como EST o EDT.

    Luego, se formatea la cadena de entrada con la abreviatura y el desplazamiento UTC, como “EST-5” o “EDT-4”, usando los especificadores de formato {} y {:02d}. Luego, se utiliza el método strptime para analizar la cadena de entrada formateada con el especificador de formato %-d %B %Y, %H:%M %Z%z, que maneja el desplazamiento de zona horaria como %z.

    Esto debería permitirte analizar la cadena de entrada con la información correcta de la zona horaria.

Comments are closed.