2010-04-14 117 views

回答

6

只要start_time和end_time沒有關聯的tzinfo類,您的答案就是要走的路。你無法直接比較天真的日期時間和時間日期時間。

2

如果比較三個日期,這樣

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

我知道老了,但由於這是在谷歌搜索結果如此之高,這裏的答案不考慮審議的兩項情況下,你可以使用一個簡單:

  1. 如果你的時間等於或者您的範圍,即你的範圍是6-8,這是6
  2. 如果你的時間範圍是說18:00至6:00,有效範圍;然而19:00不匹配。

我寫了一個函數來照顧時間比較,希望這有助於任何人查看這個老問題。

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

被測試的日期時間需要所有的天真(沒有時區)或所有知道(時區)。如果您嘗試比較意識和天真,應該發生異常。如果所有日期時間都意識到時間區間實際上並不匹配,那麼比較時就會考慮到這些時間區域。

例如

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" 
相關問題