2012-04-06 13 views
17

Geçerli zamanın 10:30 AM ve 4:30 PM arasında olup olmadığını görmenin en iyi yolu ne olurdu? , Daha iyi bir şey yazılabilirGeçerli zaman Python'un datetime modülü kullanılarak belirlenen bir aralık içinde olup olmadığını nasıl belirlerim?

from datetime import datetime 
nw = datetime.now() 
hrs = nw.hour;mins = nw.minute;secs = nw.second; 
zero = timedelta(seconds = secs+mins*60+hrs*3600) 
st = nw - zero # this take me to 0 hours. 
time1 = st + timedelta(seconds=10*3600+30*60) # this gives 10:30 AM 
time2 = st + timedelta(seconds=16*3600+30*60) # this gives 4:30 PM 
if nw>= time1 or nw <= time2: 
    print "yes, within the interval" 

beni bu eğer doğru bir yaklaşım bildirin:

Ben ne kadar doğru emin değilim aşağıdakilerden düşünürsün?

+0

'timedelta()' çok günler, saat ve dakika belirlemenizi sağlar Yani, onu hesaplamak zorunda değilsiniz ve kod daha okunabilir. – C2H5OH

+0

thnaks, bunu kaçırmıştım. – user993563

cevap

41
from datetime import datetime, time 
now = datetime.now() 
now_time = now.time() 
if now_time >= time(10,30) and now_time <= time(16,30): 
    print "yes, within the interval" 

Alternatif Rik tarafından önerildiği gibi kontrol:

if time(10,30) <= now.time() <= time(16,30):   
    print "yes, within the interval" 

Yan not, OP şimdiki zaman yalanlar kontrol etmek amacıyla istenen etkiyi elde etmeyen onun/onu örnekte bir or kullanılan aralıkta.

+8

Ayrıca aşağıdakilerle de çalışmalıdır: eğer zaman (10,30) <= now.time() <= time (16,30): '. –

+0

Uzantı: Tarih için bu karşılaştırmaları nasıl yapabilirim? bugün 12 mart olduğunu. öyleyse, belirli bir tarihin 12. yürüyüşü olup olmadığını nasıl kontrol ederim? – user993563

+0

@ user993563: ['datetime' doc] 'a (http://docs.python.org/py3k/library/datetime.html#available-types) ve özellikle [' datetime.date']' e bakın (http: //docs.python.org/py3k/library/datetime.html#date-objects). –

10

kabul çözüm gecede süreleri ile çalışmaz:

def isNowInTimePeriod(startTime, endTime, nowTime): 
    if startTime < endTime: 
     return nowTime >= startTime and nowTime <= endTime 
    else: #Over midnight 
     return nowTime >= startTime or nowTime <= endTime 
+2

Harika çözüm. StartTime, endTime ve nowTime öğelerinin zaman nesneleri olduğuna dikkat edin, bir datetime nesnesinin zaman bölümüne 'datetime.time()' ile bağlanabilirsiniz. – Braza

+1

Herkes bu durumu nasıl kaçırıyor? –

0

burada @ ruble'nin cevap için biraz örnek:

from datetime import datetime 

def isNowInTimePeriod(startTime, endTime, nowTime): 
    if startTime < endTime: 
     return nowTime >= startTime and nowTime <= endTime 
    else: #Over midnight 
     return nowTime >= startTime or nowTime <= endTime 


timeStart = '3:00PM' 
timeEnd = '11:00AM' 
timeNow = '2:59AM' 
timeEnd = datetime.strptime(timeEnd, "%I:%M%p") 
timeStart = datetime.strptime(timeStart, "%I:%M%p") 
timeNow = datetime.strptime(timeNow, "%I:%M%p") 

print(isNowInTimePeriod(timeStart, timeEnd, timeNow))