2010-12-06 27 views
102

Bunu yapmanın daha kolay bir yolu olmalı. Sık sık yenilenmek isteyen nesnelerim var, bu yüzden oluşturulduklarında kayıt yapmak, mevcut zaman damgasını kontrol etmek ve gerektiğinde yenilemek istiyorum.Farkı, iki tarih arasındaki saniye cinsinden nasıl kontrol ederim?

datetime.datetime zor olduğunu kanıtlamıştır ve ctime kütüphanesine dalmak istemiyorum. Bu tür şeyler için daha kolay bir şey var mı?

cevap

298

böyle total_seconds kullanın:: deltasında günlerce muhasebe ederek, daha uzun zaman damgası tutarsızlıklar işleyebilir

import datetime as dt 

a = dt.datetime(2013,12,30,23,59,59) 
b = dt.datetime(2013,12,31,23,59,59) 

(b-a).total_seconds() 

86400,0

#note that seconds doesn't give you what you want: 
(b-a).seconds 
+41

"Not", insanların özlediği en önemli bölümdür. Keşke başka bir oylama yapabilseydim. – Dexter

+0

Görünüşe göre, hatalı bir sonuç veriyor. Bölünmüş bir ikinci fark için 59.800 saniye. Yani, saniye, milisaniye veya mikrosaniye gibi daha küçük işlemler için, (ba) .microseconds 'kullanabilir ve sonra saniyeler (1000000) veya milisaniye (1000) –

+0

değerini elde etmek için bölebilirsiniz. a ve b değiştiğinde bile her zaman pozitiftir – Nickpick

24
import time 
current = time.time() 

...job... 
end = time.time() 
diff = end - current 

bu işe yarar mı?

+1

+1 için kod aşağıda görebilirsiniz; bizden herhangi birinin ne zaman gerçekleşeceğini umursamayız - geçen süreyi önemsiyoruz. Bu yüzden, gösterildiği gibi sadece ham bir zaman damgası kullanın. –

12
>>> from datetime import datetime 

>>> a = datetime.now() 

# wait a bit 
>>> b = datetime.now() 

>>> d = b - a # yields a timedelta object 
>>> d.seconds 
7 

, ben Karşılaştığınız bir karmaşık veya garip senaryo varsa bu yüzden datetime.datetime oldukça yararlı buluyorum

lütfen (7 Yukarıdaki biraz bekledi zamanın tutarda olacaktır) bilmemize izin ver.

DÜZENLEME: @WoLpH'ye, her zaman zorunlu olarak, sık sık, sık sık düzenli olarak yenilemeyi istemediğinizi belirtmek için teşekkürler. Eğer Bilinen iki tarih arasındaki farkları hesaplamak istiyorsanız,

>>> a = datetime(2010, 12, 5) 
>>> b = datetime(2010, 12, 7) 
>>> d = b - a 
>>> d.seconds 
0 
>>> d.days 
2 
>>> d.seconds + d.days * 86400 
172800 
+1

"d.seconds + d.days * 86400" öğesini döndürürseniz, bunun yerine birden çok gün için doğrudur;) – Wolph

+5

Genel durumda, bunun doğru olmadığını * unutmayın *. A - b'yi ele alalım, burada 'a' önce * 'b' (yani sonuç negatif olacaktır):' (a - b) .seconds == 86282' iken a - b == datetime.timedelta (-1, 86276, 627665) '. Doğru yöntem, 'timedelta.total_seconds() 'kullanmaktır… Ama bu sadece py2.7 +' dir. –

+2

Gerçekten de, yanıt doğru değil ve @DavidWolever yorumunu yansıtmalı. Doğru cevap şudur: timedelta.total_seconds() '. Buna göre reddedildi. – astrojuanlu

8

Total_sec işlevimiz var. İlik() Python 2.7 ile piton 2,6

import datetime 
import time 

def diffdates(d1, d2): 
    #Date format: %Y-%m-%d %H:%M:%S 
    return (time.mktime(time.strptime(d2,"%Y-%m-%d %H:%M:%S")) - 
       time.mktime(time.strptime(d1, "%Y-%m-%d %H:%M:%S"))) 

d1 = datetime.now() 
d2 = datetime.now() + timedelta(days=1) 
diff = diffdates(d1, d2) 
-2
>>> import datetime 

>>> d1 = datetime.datetime.now() 

>>> d2 = datetime.datetime.now() 

>>> d=d2 - d1 

>>> d.seconds 
İlgili konular