如何检查元组之间的日期,将日期作为开始和结束



我有一个函数,它创建了一个字典,如下所示。

x = {'filename': {'filetype': ('5/6/2019', '12/31/2019')}, 'filename2': {'filetype': ('3/24/2018', '5/6/2019')}}

我需要创建一个新函数,通过传递日期及其类型来返回基于元组日期的文件名。

def fn(date, filetype):
I'm trying to pass a date as a first argument
and the date should check if it is in between  the tuple as start and end dates
in the dictionary values above If it is in between those dates I need to return the file name
return filename

问题:

是否可以检查元组的中间日期?

您应该转换为日期时间对象:

from datetime import datetime
x = {'filename': {'filetype': ('5/6/2019', '12/31/2019')}, 'filename2': {'filetype': ('3/24/2018', '5/6/2019')}}
def fn(dateobj, filetype):
dateobj = datetime.strptime(dateobj, '%m/%d/%Y')
startdate = datetime.strptime(filetype[0], '%m/%d/%Y')
enddate = datetime.strptime(filetype[1], '%m/%d/%Y')
return startdate <= dateobj <= enddate
print(fn('6/6/2019', x['filename']['filetype']))
print(fn('4/6/2019', x['filename']['filetype']))

这将打印:

True
False

正如人们在评论中提到的,建议将字符串日期转换为日期时间对象。一种方法是:

from datetime import datetime
new_date = datetime.strptime('12/31/2019', '%m/%d/%Y')

假设所有的日期字符串都是日期时间对象,则函数变为:

def fn(date, filetype):
for filename, range in x.items():
if filetype in range:
start, end = range[filetype]
if start <= date <= end:
return filename

如果日期在该范围内,则返回文件名,否则返回无

使用split将日期按以下顺序转换为3个数值:年、月、日期。然后可以将日期作为元组进行比较。

def convert(datestr):
m, d, y = datestr.split('/')
return (int(y), int(m), int(d))
date1 = convert('12/31/2018')
date2 = convert('1/1/2019')
print(date1 < date2)

同样的方法也适用于列表,但这两种类型不能混合,要么比较中的所有日期都是元组,要么所有日期都为列表。


对于日期间隔,只需测试(例如在if语句中(:

begin <= date <= end

其中所有3个值如上所述。

最新更新