¿Cómo se convierte un time.struct_time
objeto Python en un datetime.datetime
objeto?
Tengo una biblioteca que proporciona la primera y una segunda biblioteca que quiere la segunda.
Use time.mktime () para convertir la tupla de tiempo (en localtime) en segundos desde la época, luego use datetime.fromtimestamp () para obtener el objeto datetime.
from datetime import datetime
from time import mktime
dt = datetime.fromtimestamp(mktime(struct))
tm_isdst
datos? Creo que sí, dando como resultado la fecha y hora objeto permanece ingenua en la medida en que volverNone
a.dst()
incluso sistruct.tm_isdst
es1
.mktime()
debe tenertm_isdst
en cuenta y Pythontime.mktime()
llama a lamktime()
función C en CPython.mktime()
puede elegir la hora local incorrecta cuando es ambigua (por ejemplo, durante la transición de fin de DST ("retroceso") sistruct.tm_isdst
es-1
o simktime()
en la plataforma dada ignora la entradatm_isdst
. Además, si la zona horaria local tuvo una compensación de utc diferente en el pasado y Cmktime()
no utiliza una base de datos tz histórica que pueda proporcionar los valores de compensación de utc antiguos, tambiénmktime()
puede devolver un valor incorrecto (por ejemplo, por una hora).mktime()
no ignoratm_isdst
en la plataforma dada (sí en la mía),fromtimestamp()
definitivamente pierde la información: el objeto ingenuo devueltodatetime
que representa la hora local puede ser ambiguo (marca de tiempo -> la hora local es determinista (si ignoramos los segundos bisiestos) perolocal time -> timestamp may be ambiguous e.g., during end-of-DST transition). Also,
fromtimestamp () `puede elegir un desplazamiento utc incorrecto si no utiliza una base de datos tz histórica.Me gusta esto:
fuente
*
y**
syntax le permite expandir un objeto de tipo listy o dicty para separar los argumentos: es una de mis piezas favoritas de Python. Ver docs.python.org/2/tutorial/… para más informaciónt=time.strptime("30 Jun 1997 22:59:60", "%d %b %Y %H:%M:%S"); datetime.datetime(*t[:6])
datetime
:datetime(*t[:5]+(min(t[5], 59),))
por ejemplo, para aceptar"2015-06-30 16:59:60 PDT"
.Esta no es una respuesta directa a su pregunta (que ya se respondió bastante bien). Sin embargo, habiendo tenido momentos que me muerden varias veces, no puedo enfatizar lo suficiente como para que te incumba mirar de cerca lo que proporciona tu objeto time.struct_time, en comparación con los otros campos de tiempo que pueda tener.
Suponiendo que tiene un objeto time.struct_time y alguna otra cadena de fecha / hora, compare los dos y asegúrese de no perder datos y crear un objeto datetime ingenuo sin darse cuenta, cuando puede hacerlo de otra manera.
Por ejemplo, el excelente módulo feedparser devolverá un campo "publicado" y puede devolver un objeto time.struct_time en su campo "updated_parsed":
Ahora tenga en cuenta lo que realmente obtiene con el campo "publicado".
Por la barba de Stallman ! Información de zona horaria!
En este caso, el hombre perezoso podría querer usar el excelente módulo dateutil para mantener la información de la zona horaria:
lo que nos da:
Entonces se podría usar el objeto datetime con reconocimiento de la zona horaria para normalizar todo el tiempo a UTC o lo que sea que piense que es increíble.
fuente
*_parsed
campos de feedparsed ya están normalizados a UTC, como se puede verificar en la documentación de análisis de fechas, por lo que esto es redundante.datetime
objeto que se pierde alfeedparser
analizar las fechas de cadena sin procesar.