2011-08-30 18 views
5

Her yere baktım, ve çok fazla korsanlık var gibi görünüyor, ancak bunu yapmak için basit, "iyi" yollar yok. Bir Python datetime nesnesini time.time() döndürme (saniye.microseconds) gibi mikro metriğe dönüştürmek istiyorum.Python datetime için microtime

Bunu yapmanın en iyi yolu nedir? mktime()'u kullanarak, mikrosaniyeyi tamamen kapatabilirsiniz, muhtemelen timedelta oluşturabilirsiniz, ancak bu doğru görünmüyor. Bir float(strftime("%s.%f")) (düzgün bir şekilde yuvarlama saniyesi için) kullanabilirsiniz, ancak bu bir süper-kesmek gibi görünüyor.

Bunu yapmanın "doğru" yolu nedir?

cevap

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

çalışmalarınızın strftime ve float kullanmak istemiyorsanız.

ile aynı şeyi dt = datetime.datetime.now() ile döndürür.

+0

datetime nesnesi ve yerel saat diliminiz için saat dilimi aynı olmayabilirse, bunun yerine –

+0

yerine calendar.gmtime (dt.utctimetuple()) kullanmalısınız 'calendar.timegm' anlamına gelir ve bu Mark'ın sürümü ile aynı cevabı verir - yani UTC 'datetime' olmayan nesneler için yanlıştır. Benim için çağdan beri geçen zaman, UTC ofsetimden farklı olmayan, UTC'deki biriyle aynı. – agf

+0

Saat dilimlerinden bağımsız olarak her zaman doğrudur, çünkü dt.utctimetuple UTC'deki datetime nesnesinin zaman döngüsünü döndürür. Ve calendar.timegm bir utc timetuple alır. –

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

Bu, "datetime.datetime.now()' için "time.time()" ile aynı şeyi vermiyor. 'Dt' UTC olduğunu varsayıyorsunuz, bu yüzden saat diliminin UTC ofsetiyle kapalı olacaksınız. – agf

+0

@agf, time.time() 'nedir? Bunu şu belgede bulamıyorum: http://docs.python.org/library/datetime.html –

+0

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