2013-04-12 15 views
22

Son gece yarısından bu yana geçen süreyi saniye cinsinden almak istiyorum. Pitondaki en şık yol nedir?Python'da gece yarısından bu yana geçen saniye olsun

+3

Bunu denediniz ne olacak? Bazı kodları bizimle paylaşır mısınız? (Eminim bu nottan dolayı ...) – Levon

+5

Aslında bu soruyu stackoverflow üzerinde arıyordum ama bir cevap alamadım. Python doktorlarına danıştıktan sonra sevdiğim bir çözüm buldum. Aynı sorunu olan diğer insanlara yardım etmek için çözümümüzü soru-cevap olarak gönderdim. Ama görünüşe göre insanlar bundan hoşlanmıyorlar, burada tanıtılsa bile, http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ – linqu

+1

'kapalı geoffspear, Levon, gnat, A5C1D2H2I1M1N2O1R2T1, gaige 'ile gerçek bir soru olarak değil. Kesinlikle katılmıyorum. – EB88

cevap

26

Mevcut tarih/saat döndüren bir fonksiyona tek bir arama yapmak için daha iyidir:

from datetime import datetime 

now = datetime.now() 
seconds_since_midnight = (now - now.replace(hour=0, minute=0, second=0, microsecond=0)).total_seconds() 

Ya burada herkes için

datetime.now() - datetime.now() 

dönüş sıfır timedelta yapar?

+0

Tek bir çağrı kullanmak neden daha iyi? – Dirk

+0

Aksi takdirde "şimdi" nin ne olduğuna dair iki kavram alırsınız. –

+2

@Dirk - çünkü "şimdi" anında oluşturduğum an için saniye sayısını hesaplamak istiyorum. Eğer bir satırda 'şimdi' ve ikinci bir satırda 'gece yarısı' (nano/micro/saniye sonra çalıştırılır) alırsanız, hesaplarınız yanlış gidebilir. O gece gece yarısı gerçekleştiğini düşünün. – eumiro

3

ben o tadı meselesi olduğunu seçmek için bu şekilde

+0

Bu sorunun bir parçasıysa, sorunuzu düzenlemek ve bunu girişiniz olarak orijinal yayınınıza eklemek daha iyidir. – Levon

+3

Geçerli tarihi/saati döndüren bir işlevin tek bir çağrısını yapmak daha iyidir. Dördüncü çizginizin gece yarısından önce iki nanosaniyeyi çalıştırdığını düşünün… – eumiro

+0

@eumiro: Bir satırda birleştirmek daha hızlı gitmiyor. –

12
import datetime 
now = datetime.datetime.now() 
midnight = now.replace(hour=0, minute=0, second=0, microsecond=0) 
seconds = (now - midnight).seconds 

import datetime 
import time 

today = datetime.date.today() 
seconds_since_midnight = time.time() - time.mktime(today.timetuple()) 
veya
import datetime 
now = datetime.datetime.now() 
midnight = datetime.datetime.combine(now.date(), datetime.time()) 
seconds = (now - midnight).seconds 

yapardı.

+0

Burada. :-) Aynı anda çok fazla ekledik, öyle görünüyor. Her ne kadar test edildiyse de yanlış yazılmış şeyler yaptım. –

+1

gece yarısı almanın başka bir yolu: ['midnight = datetime (d.year, d.month, d.day)'] (http://stackoverflow.com/a/33276464/4279). btw, 'mktime()' veya equiv kullanmayan herhangi bir cevap. bugün bir DST geçişi olsaydı başarısız olur. – jfs

+0

Doğru bir saat dilimi uygulamasını da kullanabilirsiniz. –

-3

Alternatif:

from datetime import datetime 
seconds = (datetime.now() - datetime.today()).seconds 
+4

'datetime.today' da saat/dakika/saniye/mikrosaniye döndürür. – eumiro

+0

Evet, datetime.today(), date.today() gibi görünmüyor. Bu yüzden daha önce hiç kullanmadım, sanırım. Anlamsız bir işlev gibi görünüyor. –

İlgili konular