2011-08-30 19 views
5

He mirado por todas partes, y parece que hay muchos hacks, pero no formas simples, "buenas" de hacer esto. Quiero convertir un objeto Python datetime en microtime como time.time() returns (seconds.microseconds).Python datetime to microtime

¿Cuál es la mejor manera de hacerlo? Usando mktime() elimina los microsegundos por completo, es posible que construya un timedelta, pero eso no parece correcto. También podría usar un float(strftime("%s.%f")) (que representa los segundos de redondeo correctamente), pero eso parece un súper truco.

¿Cuál es la forma "correcta" de hacer esto?

Respuesta

6
time.mktime(dt.timetuple()) + dt.microsecond/1000000.0 

obras si no desea utilizar strftime y float.

Devuelve lo mismo que time.time() con dt = datetime.datetime.now().

+0

Si la zona horaria del objeto datetime y su zona horaria local pueden no ser las mismas, debe usar calendar.gmtime (dt.utctimetuple()) en su lugar –

+0

Creo te refieres a 'calendar.timegm', y eso da la misma respuesta que la versión de Mark, lo que significa que es incorrecta para objetos que no sean UTC' datetime'. El tiempo desde la época para mí es el mismo que para alguien en UTC, no diferente para mi compensación UTC. – agf

+0

Siempre es correcto independientemente de su zona horaria, ya que dt.utctimetuple devuelve la tupla de tiempo del objeto datetime en UTC. Y calendar.timegm toma utc timetuple. –

2
def microtime(dt): 
    unixtime = dt - datetime.datetime(1970, 1, 1) 
    return unixtime.days*24*60*60 + unixtime.seconds + unixtime.microseconds/1000000.0 
+0

Esto no me da lo mismo que 'time.time()' para 'datetime.datetime.now()'. Parece que está asumiendo que 'dt' es UTC, por lo que estará fuera de la zona horaria de desplazamiento de UTC. – agf

+0

@agf, ¿qué es 'time.time()'? No puedo encontrarlo en la documentación: http://docs.python.org/library/datetime.html –

+0

No 'datetime.time',' time.time() '- http: //docs.python. org/library/time.html # time.time – agf