首页 > 解决方案 > 将日期添加到日期,然后减去指定的日期(如果它经过它们)

问题描述

我想知道是否可以在日期上增加 7 天,如果它落在我之前指定的日期,它会减去它落在的日期数量。这是我的尝试,我似乎无法成功:

from datetime import date, timedelta

days_to_add = 11
start = date(2020, 1, 1)
dates_to_skip = [(2020, 1, 6), (2020, 1, 7), (2020, 1, 14)]
days_skip = 0
x = 0

for days in days_to_add:
    while x < days_to_add:
        start += timedelta(days=1)
        x += 1

        if start == dates_to_skip:
            days_skip += 1

result = start - days_skip
print(str(result))

标签: pythondatetimetimedelta

解决方案


while略短:您可以按如下方式摆脱循环

from datetime import date, timedelta

start = date(2020, 1, 1)
days_to_add = 11
dates_to_skip = [date(2020, 1, 6), date(2020, 1, 7), date(2020, 1, 14)]

skipped = 0
for days_add in range(days_to_add+1):
    if start + timedelta(days=days_add) in dates_to_skip:
        skipped += 1  

print(f"skipped {skipped} days between {start} and {start+timedelta(days=days_to_add)}.")
# skipped 2 days between 2020-01-01 and 2020-01-12.

一点点展望:pandas date_range如果您想了解以下内容,可能会在这里有用:

import pandas as pd
# create a date range with all dates, including the ones to skip:
dr = pd.date_range(start, periods=days_to_add+1)
# select only the dates that are not in dates_to_skip:
dr = dr[~dr.isin(dates_to_skip)]
print(dr)
# DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',
#                '2020-01-05', '2020-01-08', '2020-01-09', '2020-01-10',
#                '2020-01-11', '2020-01-12'],
#               dtype='datetime64[ns]', freq=None)

推荐阅读