2013-05-26 12 views
57

Python fornisce diversi pacchetti (datetime, time, calendar) come si può vedere here per gestire il tempo. Ho fatto un grosso errore utilizzando quanto segue per ottenere l'ora GMT corrente time.mktime(datetime.datetime.utcnow().timetuple())Qual è il modo più semplice per ottenere l'ora GMT in formato timestamp Unix?

Che cosa è un modo semplice per ottenere l'ora GMT in timestamp Unix?

+1

Quali sono input/output? 'datetime.utcnow()' restituisce l'ora UTC corrente come oggetto datetime (presumo che tu voglia UTC quando parli di "ora GMT"). 'time.time()' restituisce il timestamp Unix direttamente come numero float. Ecco [come convertire datetime.date/datetime.datetime che rappresenta il tempo in UTC in timestamp POSIX] (http://stackoverflow.com/a/8778548/4279). – jfs

+0

Il tuo metodo proposto è sbagliato, o troppo verboso? Correlato: http://stackoverflow.com/questions/15940280/how-to-get-utc-time-in-python –

+0

Perché il tuo metodo è stato un errore? – skeller88

risposta

31

Questo aiuto?

from datetime import datetime 
import calendar 

d = datetime.utcnow() 
unixtime = calendar.timegm(d.utctimetuple()) 
print unixtime 

How to convert Python UTC datetime object to UNIX timestamp

+2

Invece di 'datetime.utcnow(). Utctimetuple()', potresti anche usare ['time.gmtime()'] (http://docs.python.org/2/library/time.html#time.gmtime). – Cairnarvon

+1

Il collegamento è morto! –

+1

@GauravDave Grazie, ho aggiornato il collegamento con una versione archiviata. –

97

userei time.time() per ottenere un timestamp in secondi dall'epoca.

import time 

time.time() 

uscita:

1369550494.884832 

Per l'attuazione CPython standard sulla maggior parte piattaforme questo restituirà un valore UTC.

+12

Il problema è che l'orologio locale della tua macchina potrebbe non essere in UTC. – 9000

+0

@ 9000: corretto, anche se insisterò sempre su UTC in qualsiasi ambiente in cui il tempo sia importante. E ha chiesto la soluzione più semplice. Nota che con CPython su piattaforme moderne, inclusi Linux, BSD, Mac OS X e Windows, tutti restituiranno UTC per time.time(). Questo rispecchia il comportamento della funzione temporale della libreria standard C su questi SO. –

+19

@ 9000: il fuso orario locale non ha importanza. Il tempo Unix corrisponde all'ora UTC (se ignoriamo il tempo intorno ai secondi bisestili). Pensaci: il timestamp è il numero di secondi trascorsi dall'epoca (un momento fisso nel tempo): perché dipendere da quale orologio locale della macchina del fuso orario utilizza? In qualsiasi momento, il tempo Unix è lo stesso in tutto il mondo.Qualche piattaforma (sconosciuta) potrebbe utilizzare un'epoca diversa, ma il suo valore non dipenderebbe dal fuso orario locale. – jfs

0

mi piace questo metodo:

import datetime, time 

dts = datetime.datetime.utcnow() 
epochtime = round(time.mktime(dts.timetuple()) + dts.microsecond/1e6) 

Gli altri metodi pubblicati qui sono o non garantiti per darvi UTC su tutte le piattaforme o segnalare solo secondi interi. Se si desidera la piena risoluzione, questo funziona, per il micro-secondo.

3

O semplicemente utilizzando il modulo standard datetime

In [2]: from datetime import timezone, datetime 
    ...: int(datetime.now(tz=timezone.utc).timestamp() * 1000) 
    ...: 
Out[2]: 1514901741720 

È possibile troncare o moltiplicare a seconda della risoluzione desiderata

+0

Il codice in particolare sta forzando il tempo in un numero intero, quindi sono confuso perché il testo di output è un numero decimale? – Weston

+0

mio male, ho aggiunto il casting int in seguito – Maresh

Problemi correlati