簡體   English   中英

使用 Python 計算一系列日期之間的總天數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM