我有一个像我怎么能找到,如果日期位于两个日期
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