2011-08-30 12 views
5

Rozejrzałem się dookoła i wydaje się, że jest dużo hacków, ale nie ma prostych, "dobrych" sposobów, aby to zrobić. Chcę przekonwertować obiekt Python datetime na mikrotime, taki jak time.time() zwraca (seconds.microseconds).Python datetime to microtime

Jaki jest najlepszy sposób na zrobienie tego? Korzystanie z mktime() powoduje całkowite odcięcie mikrosekund, więc możliwe, że uda Ci się zbudować timedelta, ale to nie wydaje się właściwe. Możesz także użyć float(strftime("%s.%f")) (prawidłowo zaokrąglając sekundy), ale to wygląda na super-hack.

Jaki jest "właściwy" sposób na zrobienie tego?

Odpowiedz

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

prace, jeśli nie chcesz używać strftime i float.

Zwraca to samo, co time.time() z dt = datetime.datetime.now().

+0

Jeśli strefa czasowa dla obiektu datetime i lokalnej strefy czasowej może nie być taka sama, należy zamiast tego użyć opcji calendar.gmtime (dt.utctimetuple()). –

+0

masz na myśli 'calendar.timegm', a to daje tę samą odpowiedź co wersja Mark - co oznacza, że ​​jest niepoprawna dla obiektów' datetime' innych niż UTC. Czas, jaki upłynęła od epoki dla mnie, jest taki sam jak dla kogoś w UTC, nie różny od mojego offsetu UTC. – agf

+0

To zawsze jest poprawne, niezależnie od strefy czasowej, ponieważ dt.utctimetuple zwraca krotka czasową obiektu datetime w UTC. A calendar.timegm przyjmuje czas utc. –

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

To nie daje mi tego samego, co 'time.time()' dla 'datetime.datetime.now()'. Wygląda na to, że zakładasz, że 'dt' to UTC, więc będziesz wyłączony przez przesunięcie UTC strefy czasowej. – agf

+0

@agf, co to jest 'time.time()'? Nie mogę znaleźć tego w dokumentacji: http://docs.python.org/library/datetime.html –

+0

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