¿Cómo se convierte un time.struct_timeobjeto Python en un datetime.datetimeobjeto?
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_isdstdatos? Creo que sí, dando como resultado la fecha y hora objeto permanece ingenua en la medida en que volverNonea.dst()incluso sistruct.tm_isdstes1.mktime()debe tenertm_isdsten 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_isdstes-1o 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_isdsten la plataforma dada (sí en la mía),fromtimestamp()definitivamente pierde la información: el objeto ingenuo devueltodatetimeque 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
*_parsedcampos 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.datetimeobjeto que se pierde alfeedparseranalizar las fechas de cadena sin procesar.