Python 如何检查给定的datetime对象是否为;介于;两次约会?

Python 如何检查给定的datetime对象是否为;介于;两次约会?,python,django,datetime,time,Python,Django,Datetime,Time,如何检查我的当前时间是否介于两者之间 my_event = Event.objects.get(id=4) current_time = datetime.datetime.now() my\u event.start\u time

如何检查我的当前时间是否介于两者之间

my_event = Event.objects.get(id=4)
current_time = datetime.datetime.now()
my\u event.start\u time
只要开始时间和结束时间没有关联的tzinfo类,您的答案就是正确的。您不能直接将原始日期时间与时区日期时间进行比较。

如果比较三个日期,您可以使用简单的方法,如下所示

my_event.start_time < current_time < my_event.end_time
如果日期1
我知道这很古老,但由于这在谷歌搜索结果中占有很高的地位,这里的答案没有考虑两种情况:

  • 如果你的时间等于你的射程(你的射程是6-8,它是6)
  • 如果您的时间范围是18:00到6:00,则为有效范围;但是19:00不匹配
  • 我写了一个函数来处理时间比较,希望这能帮助任何人查看这个老问题

    if date1 < yourdate < date2:
      ...do something...
    else:
      ...do ...
    
    def处理时间(开始时间、开始时间、结束时间):
    
    如果开始测试的日期时间需要全部为naive(无时区)或all aware(时区)。如果您尝试比较aware和naive,则会出现异常。如果所有的日期时间都知道,那么在比较时,时区实际上不必匹配

    e、 g

    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
    
    类RND(datetime.tzinfo):
    “”“UTC随机时区-3”“”
    def utcoffset(自身,dt):
    return datetime.timedelta(小时=-3)
    def tzname(自身,dt):
    返回“RND”
    def dst(自身,dt):
    return datetime.timedelta(小时=0)
    愚人节=datetime.datetime(年=2017,月=4,日=1,小时=12,tzinfo=pytz.UTC)
    random_dt=datetime.datetime(年=2017,月=4,日=1,小时=9,tzinfo=RND())
    random_dt==愚人节
    #与转换回utc的时间相同。
    #在3个原始日期时间的测试之间
    start_spring=datetime.datetime(年=2018,月=3,日=20)
    end_spring=datetime.datetime(年=2018,月=6,日=21)
    愚人节=日期时间。日期时间(年=2018,月=4,日=1)
    如果开始春天<愚人节>结束春天:
    打印“愚人节在春天”
    
    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"