Добавление дней к дате, а затем вычитание указанных дней, если она проходит через них - PullRequest
0 голосов
/ 06 мая 2020

Мне было интересно, можно ли добавить 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))

1 Ответ

0 голосов
/ 06 мая 2020

немного короче: вы могли бы избавиться от while l oop следующим образом

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)
...