my_event = Event.objects.get(id=4)
current_time = datetime.datetime.now()
我該如何檢查我的當前時間是否在他們之間?如何檢查給定的日期時間對象是否在兩個日期時間之間?
my_event.start_time < current_time < my_event.end_time
my_event = Event.objects.get(id=4)
current_time = datetime.datetime.now()
我該如何檢查我的當前時間是否在他們之間?如何檢查給定的日期時間對象是否在兩個日期時間之間?
my_event.start_time < current_time < my_event.end_time
只要start_time和end_time沒有關聯的tzinfo類,您的答案就是要走的路。你無法直接比較天真的日期時間和時間日期時間。
如果比較三個日期,這樣
if date1 < yourdate < date2:
...do something...
else:
...do ...
我知道老了,但由於這是在谷歌搜索結果如此之高,這裏的答案不考慮審議的兩項情況下,你可以使用一個簡單:
我寫了一個函數來照顧時間比較,希望這有助於任何人查看這個老問題。
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
被測試的日期時間需要所有的天真(沒有時區)或所有知道(時區)。如果您嘗試比較意識和天真,應該發生異常。如果所有日期時間都意識到時間區間實際上並不匹配,那麼比較時就會考慮到這些時間區域。
例如
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"