我有一個像我怎麼能找到,如果日期位於兩個日期
date['min'] = '2013-11-11'
date['max'] = '2013-11-23'
日之間是否有任何單行功能,如果日期位於此範圍內可返回true。
我的意思是,如果只提供date.min
然後我需要檢查給定的日期是否比它更大,如果只提供最大值,那麼我需要檢查它是否小於該值。如果兩者都提供那麼它是否屬於他們之間的形式YYYY-MM-DD
我有一個像我怎麼能找到,如果日期位於兩個日期
date['min'] = '2013-11-11'
date['max'] = '2013-11-23'
日之間是否有任何單行功能,如果日期位於此範圍內可返回true。
我的意思是,如果只提供date.min
然後我需要檢查給定的日期是否比它更大,如果只提供最大值,那麼我需要檢查它是否小於該值。如果兩者都提供那麼它是否屬於他們之間的形式YYYY-MM-DD
日期可以比按字母順序,以及:
'2013-11-11' < '2013-11-15' < '2013-11-23'
date['min'] < your_date < date['max']
這不會正確地爲其他格式,如DD.MM.YYYY
或MM/DD/YYYY
工作。在這種情況下,您必須解析字符串並將它們轉換爲datetime
對象。
如果不知道最小/最大變量是否存在,你可以這樣做:
date.get('min', '0000-00-00') < your_date < date.get('max', '9999-99-99')
和任何你喜歡替換默認文本值。
如果我沒有兩個值怎麼辦?我的意思是我不想使用,如果其他人。有沒有什麼捷徑。我的所有日期都只有yyyy-mm-dd格式 – user2294401 2013-04-23 09:59:40
@ user2294401 - 好的,請參閱我的更新答案,即使最小/最大或其中任何一個都不存在,它也能正常工作。 – eumiro 2013-04-23 10:07:21
我認爲簡單的比較適用於此。
>>> from datetime import timedelta, date
>>> min_date = date.today()
>>> max_date = date.today() + timedelta(days=7)
>>> d1 = date.today() + timedelta(days=1)
>>> d2 = date.today() + timedelta(days=10)
>>> min_date < d1 < max_date
True
>>> min_date < d2 < max_date
False
以下是更新版本:
def is_in_range(d, min=date.min, max=date.max):
if max:
return min < d < max
return min < d
print is_in_range(d1, min_date, max_date)
print is_in_range(d2, min_date, max_date)
print is_in_range(d1, min_date)
print is_in_range(d2, min_date)
True
False
True
True
即使max_date爲空,我也希望系統返回true – user2294401 2013-04-23 10:04:43
如果處理日期的對象:
from datetime import date
in_range = (first_date or date.min) < my_date < (second_date or date.max)
如果我的second_date小於my_date,它將如何工作。它不會迴歸真實 – user2294401 2013-04-23 10:20:02
是否必須是單行? :) – Asterisk 2013-04-23 10:06:06
好吧,它可以是兩行,但我不想如果其他多次 – user2294401 2013-04-23 10:06:52