2011-11-05 11 views

Respuesta

32

No es difícil de usar el método de tiempo tupla y seguir manteniendo los microsegundos:

>>> t = datetime.datetime.now() 
>>> t 
datetime.datetime(2011, 11, 5, 11, 26, 15, 37496) 

>>> time.mktime(t.timetuple()) + t.microsecond/1E6 
1320517575.037496 
+1

¿Puede explicar por qué esta solución es mejor que '(dt - datetime.datetime.utcfromtimestamp (0)). Total_seconds()'? La adición manual de microsegundos me parece poco elegante. –

+2

@RamRachum: su fórmula asume que 'dt' es la hora UTC. 'mktime()' asume que la entrada es hora local. Debe evitar usar objetos naive datetime que representen la hora local, a menos que desee mostrarlos inmediatamente. Use en su lugar los objetos de fecha y hora UTC de la zona horaria u hora UTC. – jfs

11

dado un objeto dtdatetime.datetime, podría utilizar

(dt - datetime.datetime.utcfromtimestamp(0)).total_seconds() 

Ejemplo:

>>> dt = datetime.datetime.now(); t = time.time() 
>>> t 
1320516581.727343 
>>> (dt - datetime.datetime.utcfromtimestamp(0)).total_seconds() 
1320516581.727296 

Nota que el método timedelta.total_seconds() se introdujo en Python 2.7.

+1

'((24 * 3600 * td.days + td .seconds) * 1000000 + td.microseconds)/1e6' en Python <2.7 – jfs

6

Una combinación de datetime.timetuple() y time.mktime():

>>> import datetime 
>>> import time 
>>> now = datetime.datetime.now() 
>>> secondsSinceEpoch = time.mktime(now.timetuple()) 
+0

Esto quita el subtítulo segunda parte del tiempo. –

+0

+1 porque esta respuesta es útil de todos modos y no se justifica el downvote. –

+0

+1 de mí también. Estoy de acuerdo con Sven en ambos aspectos :-) –

21
time.mktime(dt_obj.timetuple()) 

debe hacer el truco.

+5

Esto cae la segunda parte del tiempo. –

+3

+1 porque esta respuesta es útil de todos modos y no se justifica el downvote. –

3

Sé que esto es una cuestión de edad, pero en Python 3.3+ ahora hay una manera más fácil de hacer esto utilizando la datetime.timestamp() método:

from datetime import datetime 
timestamp = datetime.now().timestamp() 
+2

'timestamp = time.time()' – jfs

+0

Eso manejaría este caso específico (encuentra la marca de tiempo actual), pero usar '' datetime.timestamp() '' es más poderoso porque te permite encontrar la marca de tiempo en un datetime arbitrario. – lsowen

+0

Proporcione un mejor ejemplo entonces. Porque '.now(). Timestamp()' es estrictamente peor que 'time.time()'. El primero puede producir un resultado incorrecto durante las transiciones DST. Un mejor ejemplo: '.now (utc) .timestamp()' (al menos, produce el resultado correcto). – jfs

Cuestiones relacionadas