2010-04-14 26 views

Trả lời

6

Câu trả lời của bạn là cách để đi miễn là start_time và end_time không có lớp tzinfo được liên kết. Bạn không thể so sánh trực tiếp một datetime ngây thơ với một thời gian-datetime.

2

bạn có thể sử dụng một đơn giản nếu so sánh ba ngày, như thế này

if date1 < yourdate < date2: 
    ...do something... 
else: 
    ...do ... 
1

Tôi biết cũ, nhưng vì đây là quá cao trên kết quả của Google, câu trả lời ở đây không đi vào xem xét hai trường hợp:

  1. Nếu thời gian của bạn bằng một trong hai phạm vi của bạn, tức là phạm vi của bạn là 6-8 và nó là 6.
  2. Nếu phạm vi thời gian của bạn là từ 18:00 đến 6:00, phạm vi hợp lệ; tuy nhiên 19:00 sẽ không khớp.

Tôi đã viết một chức năng để chăm sóc so sánh thời gian, hy vọng điều này sẽ giúp mọi người xem câu hỏi cũ này.

def process_time(intime, start, end): 
    if start <= intime <= end: 
     return True 
    elif start > end: 
     end_day = time(hour=23, minute=59, second=59, microsecond=999999) 
     if start <= intime <= end_day: 
      return True 
     elif intime <= end: 
      return True 
    return False 
0

Thời gian lấy dữ liệu được kiểm tra cần phải ngây thơ (không có múi giờ) hoặc tất cả nhận thức (múi giờ). Một ngoại lệ sẽ xảy ra nếu bạn cố gắng so sánh nhận thức và ngây thơ. Nếu tất cả các datetimes nhận thức được các múi giờ không thực sự có để phù hợp mà dường như được đưa vào xem xét khi so sánh.

ví dụ:

class RND(datetime.tzinfo): 
    """ Random timezone UTC -3 """ 

    def utcoffset(self, dt): 
     return datetime.timedelta(hours=-3) 

    def tzname(self, dt): 
     return "RND" 

    def dst(self, dt): 
     return datetime.timedelta(hours=0) 


april_fools = datetime.datetime(year=2017, month=4, day=1, hour=12, tzinfo=pytz.UTC) 

random_dt = datetime.datetime(year=2017, month=4, day=1, hour=9, tzinfo=RND()) 

random_dt == april_fools 
# True as the same time when converted back to utc. 

# Between test of 3 naive datetimes 
start_spring = datetime.datetime(year=2018, month=3, day=20) 
end_spring = datetime.datetime(year=2018, month=6, day=21) 
april_fools = datetime.datetime(year=2018, month=4, day=1) 


if start_spring < april_fools < end_spring: 
    print "April fools is in spring" 
Các vấn đề liên quan