如何解决如何计算两个日期之间的差异,并动态拆分它们?蟒蛇
我必须编写一个函数,该函数将计算两个日期之间的天数差异。如果天数超过30,则将其拆分为n个日期范围,然后保存在列表或字典中。我已经开始使用该功能,但无法完成。该功能必须计算动态值。
例如
start_date = '2020-07-01'
end_date = '2020-09-15'
difference = (end_date - start_date).days
dateranges = []
dateranges.append(start_date)
if difference > 30:
end_date = start_date + dt.timedelta(days=30)
dateranges.append(end_date)
但是当每次都需要一个新的start_date和end_date并计算它们之间的差时,我不知道如何使它循环。例如,我总是在此处添加30 dys,但可能是必须添加的天数减少了。
解决方法
例如,我总是在此处添加30个dys,但数量可能更少 天数必须添加。
datetime
库和timedelta
函数会处理它,并在需要时增加月份。
from datetime import datetime
from datetime import timedelta
start_date = '2020-07-01'
end_date = '2020-09-15'
def date_difference(d1,d2):
d1 = datetime.strptime(d1,"%Y-%m-%d")
d2 = datetime.strptime(d2,"%Y-%m-%d")
if abs((d2 - d1).days) > 30:
dates = []
# if you don't want to include start_date,use range(1,30) instead.
for i in range(0,30):
dates.append(d1 + timedelta(days=i))
return dates
return []
print(date_difference(start_date,end_date))
输出:
[datetime.datetime(2020,7,1,0),datetime.datetime(2020,2,3,4,5,6,8,9,10,...
datetime.datetime(2020,30,0)]
,
如果您想要两个日期之间的日期范围列表,且相差最大为30天,则可以使用timedelta遍历该范围并相应地分割。
from datetime import datetime
from datetime import timedelta
def get_range(start_date,end_date,date_diff):
start_date = datetime.strptime(start_date,"%Y-%m-%d")
end_date = datetime.strptime(end_date,"%Y-%m-%d")
if abs((end_date - start_date).days) <= date_diff:
return [datetime.strftime(start_date,"%Y-%m-%d"),datetime.strftime(end_date,"%Y-%m-%d")]
else:
result=[]
while 1:
d3=start_date+timedelta(days=date_diff)
if d3>=end_date:
result.append([datetime.strftime(start_date,"%Y-%m-%d")])
break
else:
result.append([datetime.strftime(start_date,datetime.strftime(d3,"%Y-%m-%d")])
start_date=d3+timedelta(days=1)
return result
print(get_range('2020-07-01','2020-09-15',30))
输出
[['2020-07-01','2020-07-31'],['2020-08-01','2020-08-31'],['2020-09-01','2020-09-15']]
在这里,我假设按日期范围,您指的是开始日期和结束日期,例如[start,end]
。
from datetime import datetime,timedelta
def split_dates(prev_date,next_date,interval):
date_ranges = []
if next_date > prev_date+timedelta(days=30):
while prev_date <= next_date:
prev_date += timedelta(days=interval)
date_ranges.append(prev_date)
return date_ranges
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。