Zaman çizelgesini toplam saniyeye dönüştür


186

Zaman farkım var

time1 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
...
time2 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
diff = time2 - time1

Şimdi, geçen toplam saniye sayısını nasıl bulabilirim? diff.secondsgün saymaz. Yapabilirim:

diff.seconds + diff.days * 24 * 3600

Bunun için yerleşik bir yöntem var mı?


8
@RestRisiko - haklısın. Yine de, Stack Overflow ile ilgili soruya sahip olmak yararlıdır, bu yüzden bir dahaki sefere ben veya başka bir kişi, Google için bunun en iyi sonucu olarak iyi bir cevabı var.
ripper234

"İyi" nin alternatif tanımlarını daha sonra tartışabiliriz; lütfen kaçmadan önce cevabımı oku :)
John Machin

Bilgisayarınızda time1ve diffkodunuzda birden fazla sorun var . Geçerli utc zamanını naif bir datetime nesnesi olarak almak için datetime.utcnow()bunun yerine kullanın. Farkı bulmak için neden yerel saat yerine UTC kullanmanız gerektiğini anlamak için bkz . Tarihler arasında 24 saat geçtiyse bulma - Python . time.monotonic()olaylar arasında ( time.time()veya yerine datetime.utcnow()) geçen süreyi bulmak tercih edilebilir .
jfs

Yanıtlar:



8

İfadenizde şu ya da bu şekilde bir sorununuz var datetime.datetime.fromtimestamp(time.mktime(time.gmtime())).

(1) İhtiyacınız olan tek şey, saniyeler içinde iki örnek arasındaki fark ise, çok basit time.time()olan işi yapar.

(2) Bu zaman damgalarını başka amaçlarla kullanıyorsanız, ne yaptığınızı düşünmeniz gerekir, çünkü sonucun her yerinde büyük bir koku vardır:

gmtime()UTC'de bir zaman aralığı döndürür, ancak yerel saattemktime() bir zaman aralığı bekler .

Standart TZ'nin UTC + 10 olduğu Melbourne, Avustralya'dayım, ancak gün ışığından yararlanma yarın sabaha kadar hala yürürlükte, bu yüzden UTC + 11. Aşağıdakileri yürüttüğümde, 2011-04-02T20: 31 burada yerel saatti ... UTC 2011-04-02T09: 31

>>> import time, datetime
>>> t1 = time.gmtime()
>>> t2 = time.mktime(t1)
>>> t3 = datetime.datetime.fromtimestamp(t2)
>>> print t0
1301735358.78
>>> print t1
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=9, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=0) ### this is UTC
>>> print t2
1301700663.0
>>> print t3
2011-04-02 10:31:03 ### this is UTC+1
>>> tt = time.time(); print tt
1301736663.88
>>> print datetime.datetime.now()
2011-04-02 20:31:03.882000 ### UTC+11, my local time
>>> print datetime.datetime(1970,1,1) + datetime.timedelta(seconds=tt)
2011-04-02 09:31:03.880000 ### UTC
>>> print time.localtime()
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=20, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=1) ### UTC+11, my local time

İfadenizin sonucunun t3'ün UTC + 1 olduğunu fark edeceksiniz ki bu UTC + (yerel DST farkım) ... çok anlamlı değil. datetime.datetime.utcnow()DST açıldığında / kapandığında bir saat atlamayacak ve size daha fazla hassasiyet verebilecek olanları kullanmayı düşünmelisiniz.time.time()


Açıklama için teşekkürler. Şu anda kullandığım amaç için, şimdi birkaç saat bile fark var ve sonra önemli değil, ama daha anlamlı bir şey yazdığımda gelecekte bunu kontrol edeceğinden emin olacağım.
ripper234

-7

Mx.DateTime modülünü kullanabilirsiniz

import mx.DateTime as mt

t1 = mt.now() 
t2 = mt.now()
print int((t2-t1).seconds)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.