需求说明
简单、高效地计算出两个日期之间相差的具体天数。
要求在尽可能短的时间内,对两个包含了最大差值600000天以上的6000条乱序日期数据的文件进行交叉计算(A依次取一个数,遍历B文件,即进行36000000次计算)。
解决办法
# year, month, day均为int
d1 = datetime.date(year1, month1, day1)
d2 = datetime.date(year2, month2, day2)
print((d1 - d2).days
嗯,就这么简单
其他不可行的路线
1 用dateutil的rrule
import datetime
from dateutil import rrule
day_sep = rrule.rrule(rrule.DAILY, dtstart=datetime.date(2020, 6, 29), until=datetime.date(2021, 1, 1))
print(day_sep.count())
我不知道为什么百度一搜“python 计算 时间间隔/差值”搜出来的基本全都是这种方法,这种方法极其不理想(超级垃圾),速度极其低
2 time.mktime
import time
start_date = "2020-1-1"
end_date = "2021-1-1"
start_sec = time.mktime(time.strptime(start_date, '%Y-%m-%d'))
end_sec = time.mktime(time.strptime(end_date, '%Y-%m-%d'))
days = int((end_sec - start_sec) / 86400)
print(days)
不能用的,这个使用windows/linux的时间戳计算的,有系统时间戳限制,无法对跨越600000天的两个时间计算,并且出现了莫名其妙的格式不匹配问题,不过因为直接废弃了这个解决方案,所以没有去细究bug原因
3 自己手写
也不是我自己手写,是之前我接受的代码
1天1天加,将小的日期加到和大的日期相等,从而计算出所经过的天数、月数、年数…
数据量小、数据差值小的时候还能用,数据量一大、差值一大直接爆炸
当然要是遵循这个总体思路的话,也是可以有很多优化方法的,但不如最开头的方法简单快捷
参考资料
python计算两个日期的间隔天数
Python计算日期间隔的天数
Python 计算两个日期之间天数
python计算两个时间间隔准确的天、月、年之差
python 计算两个日期之间的天数差、周数差、月数差、年数差