2013-05-26 12 views
57

Python dostarcza różne pakiety (datetime, time, calendar), jak widać here w celu uporania się z czasem. Zrobiłem wielki błąd, używając następujących informacji, aby uzyskać aktualny czas GMT. time.mktime(datetime.datetime.utcnow().timetuple())Jaki jest najłatwiejszy sposób uzyskania aktualnego czasu GMT w formacie datownika Unix?

Jaki jest prosty sposób na uzyskanie aktualnego czasu GMT w uniksowym znaczniku czasu?

+1

Jakie są wejścia/wyjścia? 'datetime.utcnow()' zwraca aktualny czas UTC jako obiekt datetime (zakładam, że chcesz UTC, kiedy mówisz o "czasie GMT"). 'time.time()' zwraca uniksowy znacznik czasu bezpośrednio jako liczbę zmiennoprzecinkową. Oto [jak przekonwertować datetime.date/datetime.datetime reprezentujący czas w UTC do datownika POSIX] (http://stackoverflow.com/a/8778548/4279). – jfs

+0

Czy proponowana metoda jest niewłaściwa, czy tylko zbyt szczegółowa? Powiązane: http://stackoverflow.com/questions/15940280/how-to-get-utc-time-in-python –

+0

Dlaczego Twoja metoda była błędna? – skeller88

Odpowiedz

31

Czy to pomaga?

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

Zamiast 'datetime.utcnow(). Utctimetuple()', możesz również użyć ['time.gmtime()'] (http://docs.python.org/2/library/time.html#time.gmtime). – Cairnarvon

+1

Link jest martwy! –

+1

@GauravDave Dzięki, zaktualizowałem link za pomocą wersji zarchiwizowanej. –

97

użyłbym time.time(), aby uzyskać znacznik czasu w sekundach od początku epoki.

import time 

time.time() 

wyjściowa:

1369550494.884832 

Dla standardowego wdrożenia CPython na większości platform to zwróci wartość UTC.

+12

Połów jest taki, że zegar lokalny urządzenia może znajdować się poza UTC. – 9000

+0

@ 9000: Dokładnie, chociaż zawsze nalegałbym na UTC w każdym środowisku, w którym liczy się czas. I poprosił o najprostsze rozwiązanie. Zauważ, że dzięki CPython na nowoczesnych platformach, w tym Linux, BSD, Mac OS X i Windows, wszystkie będą zwracały UTC dla time.time(). Odzwierciedla to zachowanie funkcji czasu standardowej biblioteki C w tych systemach operacyjnych. –

+19

@ 9000: Lokalna strefa czasowa nie ma znaczenia. Czas Unix odpowiada czasowi UTC (jeśli zignorujemy czas w okolicach sekund przestępnych). Pomyśl o tym: znacznik czasu to liczba sekund, które upłynęły od epoki (ustalony moment w czasie): dlaczego zależy to od czasu lokalnego zegara maszyny strefy czasowej? W dowolnym momencie czas Unix jest taki sam na całym świecie.Niektóre (nieznane) platformy mogą używać innej epoki, ale jej wartość nadal nie będzie zależna od lokalnej strefy czasowej. – jfs

0

Lubię tą metodą:

import datetime, time 

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

innych metod zamieszczone tutaj są albo nie gwarantuje daje UTC na wszystkich platformach lub tylko zgłosić całe sekund. Jeśli chcesz pełnej rozdzielczości, działa to do mikro-sekundy.

3

lub po prostu za pomocą standardowego modułu datetime

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

można obciąć lub wielokrotnie w zależności od rozdzielczości chcesz

+0

Kodujesz bardzo konkretnie wymuszając czas na liczbę całkowitą, więc jestem zdezorientowany, dlaczego tekst wyjściowy jest liczbą dziesiętną? – Weston

+0

ye moje złe, dodałem int odlewania później – Maresh

Powiązane problemy