biblioteca - fecha actual python
convirtiendo el tiempo de época con milisegundos a datetime (2)
Use datetime.datetime.fromtimestamp
:
>>> import datetime
>>> s = 1236472051807 / 1000.0
>>> datetime.datetime.fromtimestamp(s).strftime(''%Y-%m-%d %H:%M:%S.%f'')
''2009-03-08 09:27:31.807000''
%f
directiva %f
solo es compatible con datetime.datetime.strftime
, no con time.strftime
.
ACTUALIZACIÓN Alternativa usando %
, str.format
:
>>> import time
>>> s, ms = divmod(1236472051807, 1000) # (1236472051, 807)
>>> ''%s.%03d'' % (time.strftime(''%Y-%m-%d %H:%M:%S'', time.gmtime(s)), ms)
''2009-03-08 00:27:31.807''
>>> ''{}.{:03d}''.format(time.strftime(''%Y-%m-%d %H:%M:%S'', time.gmtime(s)), ms)
''2009-03-08 00:27:31.807''
He usado un script de ruby para convertir el sello de tiempo iso a epoch, los archivos que estoy analizando tienen la siguiente estructura de sello de tiempo:
2009-03-08T00:27:31.807
Como quiero guardar milisegundos, utilicé el siguiente código ruby para convertirlo a un tiempo de época:
irb(main):010:0> DateTime.parse(''2009-03-08T00:27:31.807'').strftime("%Q")
=> "1236472051807"
Pero en Python intenté seguir:
import time
time.strftime(''%Y-%m-%d %H:%M:%S'', time.gmtime(1236472051807))
Pero no obtengo la fecha de hora original,
>>> time.strftime(''%Y-%m-%d %H:%M:%S'', time.gmtime(1236472051807))
''41152-03-29 02:50:07''
>>>
Me pregunto ¿está relacionado con la forma en que estoy formateando?
esos son milisegundos, solo divídalos por 1000, ya que gmtime espera segundos ...
time.strftime(''%Y-%m-%d %H:%M:%S'', time.gmtime(1236472051807/1000.0))