2010-04-14 116 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" 
相关问题