[英]Calculate the total days between a range of dates using Python
我有一個日期范圍列表,想找出這些范圍之間的總天數。 但是,這些范圍可能重疊,也可能不重疊。 我想排除重疊時間。 我也想排除的范圍之間也可能存在差距。
我很好奇計算這個的最佳方法。
一個例子:
ranges = [
{'start': 1/1/2001, 'end': 1/1/2002},
{'start': 1/1/2000, 'end': 1/1/2002},
{'start': 1/1/2003, 'end': 1/1/2004},
]
以天為單位的總范圍時間 -- 1/1/2000 到 1/1/2002 + 1/1/2003 到 1/1/2004
您可以使用 Pandas 輕松完成,這里是參考/示例代碼
import pandas as pd
data = [
{'start': 1/1/2001, 'end': 1/1/2002},
{'start': 1/1/2000, 'end': 1/1/2002},
{'start': 1/1/2003, 'end': 1/1/2004},
]
def numDays(start,end)
dt = pd.to_datetime(start, format='%d/%m/%Y')
dt1 = pd.to_datetime(end, format='%d/%m/%Y')
return (dt1-dt).days
for i in data:
print(numDays(i["start"],i["end"]))
from datetime import datetime, timedelta ranges = [ {'start': '1/1/2001', 'end': '1/1/2002'}, {'start': '1/1/2000', 'end': '1/1/2002'}, {'start': '1/1/2003', 'end': '1/1/2004'}, ] # Sort the list of date ranges by the start date ranges = sorted(ranges, key=lambda x: datetime.strptime(x['start'], '%m/%d/%Y')) # Initialize the start and end dates for the non-overlapping and non-gapped ranges start_date = datetime.strptime(ranges[0]['start'], '%m/%d/%Y') end_date = datetime.strptime(ranges[0]['end'], '%m/%d/%Y') total_days = 0 # Iterate through the list of date ranges for i in range(1, len(ranges)): current_start_date = datetime.strptime(ranges[i]['start'], '%m/%d/%Y') current_end_date = datetime.strptime(ranges[i]['end'], '%m/%d/%Y') # Check for overlaps and gaps if current_start_date <= end_date: end_date = max(end_date, current_end_date) else: total_days += (end_date - start_date).days start_date = current_start_date end_date = current_end_date # Add the last range to the total days total_days += (end_date - start_date).days print(total_days)
將值轉換為datetime.datetime
對象; 兩個這樣的對象的區別是datetime.timedelta
object,其中包含兩者之間的時間量。
>>> from datetime import datetime
>>> parse = lambda x: datetime.strptime(x, "%m/%d/%Y")
>>> t1 = [parse(d['end']) - parse(d['start']) for d in ranges]
>>> print(sum(td.days for td in t1))
1461
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.