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

我有一个函数可以在其中创建如下字典。

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

问题:

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

appyle 回答:如何检查元组之间的日期,日期作为开始和结束

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

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
,

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

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

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

,

使用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个值均如上所述。

本文链接:https://www.f2er.com/3161141.html

大家都在问