2012-04-06 7 views
17

Cách tốt nhất để xem liệu thời gian hiện tại có nằm giữa số 10:30 AM4:30 PM hay không.Làm cách nào để xác định xem thời gian hiện tại có nằm trong phạm vi được chỉ định bằng mô-đun ngày giờ của Python không?

tôi có thể nghĩ đến những điều sau đây, không chắc chắn cách chính xác:

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" 

Xin vui lòng cho tôi biết nếu điều này là cách tiếp cận đúng, có thể một cái gì đó tốt hơn được viết?

+0

'timedelta() 'phép bạn chỉ định ngày, giờ và phút quá , vì vậy bạn không phải tính toán nó và mã có thể đọc được nhiều hơn. – C2H5OH

+0

thnaks, tôi đã bỏ lỡ điều đó. – user993563

Trả lời

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" 

Một kiểm tra thay thế theo đề nghị của Rik:

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

Side lưu ý, OP đã sử dụng một or trong/example của mình mà không đạt được hiệu quả mong muốn kiểm tra rằng lời nói dối thời điểm hiện tại trong phạm vi.

+8

Cũng nên làm việc với: 'if time (10,30) <= now.time() <= time (16,30):'. –

+0

Tiện ích mở rộng: làm cách nào để tôi thực hiện các so sánh này cho ngày. nói hôm nay là tuần hành thứ 12. vì vậy làm thế nào để tôi kiểm tra nếu một ngày nhất định là tháng thứ 12? – user993563

+0

@ user993563: Kiểm tra ['datetime' doc] (http://docs.python.org/py3k/library/datetime.html#available-types) và đặc biệt là [' datetime.date'] (http: //docs.python.org/py3k/library/datetime.html#date-objects). –

10

Các giải pháp chấp nhận không làm việc với thời gian qua đêm:

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

Giải pháp tuyệt vời. Lưu ý rằng startTime, endTime và nowTime là các đối tượng thời gian, bạn có thể truy cập vào phần thời gian của một đối tượng datetime với 'datetime.time()' – Braza

+1

Mọi người bỏ lỡ điều này như thế nào! –

0

đây là ví dụ nhỏ cho câu trả lời @ đồng rúp của:

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))