example biblioteca python datetime utc epoch strftime

biblioteca - Convierta python datetime en época con strftime



set datetime python (6)

Tengo un tiempo en UTC del cual quiero el número de segundos desde la época.

Estoy usando strftime para convertirlo a la cantidad de segundos. Tomando el 1 de abril de 2012 como un ejemplo.

>>>datetime.datetime(2012,04,01,0,0).strftime(''%s'') ''1333234800''

El 1 de abril de 2012, UTC from epoch es 1333238400, pero esta cifra anterior devuelve 1333234800, que es diferente en 1 hora.

Así que parece que strftime está teniendo en cuenta el tiempo de mi sistema y aplica un cambio de zona horaria en alguna parte. Pensé que la hora era puramente ingenua?

¿Cómo puedo evitar eso? Si es posible evite importar otras bibliotecas a menos que sean estándar. (Tengo preocupaciones de portabilidad).



Python en realidad no admite% s como argumento para strftime (si lo marca en http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior , no está en la lista), el único La razón por la que está funcionando es porque Python está pasando la información al tiempo de servicio de su sistema, que usa su zona horaria local.

Si desea convertir una fecha y hora de python en segundos desde epoch, debe hacerlo explícitamente:

>>> datetime.datetime(2012,04,01,0,0).strftime(''%s'') ''1333234800'' >>> (datetime.datetime(2012,04,01,0,0) - datetime.datetime(1970,1,1)).total_seconds() 1333238400.0

En Python 3.3+ puedes usar timestamp() lugar:

>>> datetime.datetime(2012,4,1,0,0).timestamp() 1333234800.0


Tuve problemas serios con Timezones y tal. La forma en que Python maneja todo lo que sucede es bastante confuso (para mí). Las cosas parecen funcionar bien usando el módulo de calendario (ver enlaces 1 , 2 , 3 y 4 ).

>>> import datetime >>> import calendar >>> aprilFirst=datetime.datetime(2012, 04, 01, 0, 0) >>> calendar.timegm(aprilFirst.timetuple()) 1333238400


si solo necesitas una marca de tiempo en el tiempo de Unix / época, esta línea funciona:

created_timestamp = int((datetime.datetime.now() - datetime.datetime(1970,1,1)).total_seconds()) >>> created_timestamp 1522942073L

y solo depende de los trabajos de fecha y datetime en python2 y python3


import time from datetime import datetime now = datetime.now() # same as above except keeps microseconds time.mktime(now.timetuple()) + now.microsecond * 1e-6

(Lo siento, no me deja comentar sobre la respuesta existente)


import time from datetime import datetime now = datetime.now() time.mktime(now.timetuple())