仕事で良く用いる日付処理をまとめました。参考になれば幸いです。

1.指定期間内の日付リストを取得

関数定義:

input: 開始日、終了日 ※datetime
output: 開始日から終了日までの日付のリスト ※datetime

from typing import List
from datetime import datetime, timedelta

def get_dt_list(start_date: datetime, end_date: datetime) -> List[datetime]:
    out_list = []
    term_days = (end_date - start_date).days + 1
    for i in range(term_days):
        out_list.append(
            start_date + timedelta(days=i)
        )
    return out_list

実行例:

start_date = datetime(2022, 11, 29)
end_date = datetime(2022, 12, 3)
get_dt_list(start_date, end_date)

実行例の出力:

[datetime.datetime(2022, 11, 29, 0, 0),
datetime.datetime(2022, 11, 30, 0, 0),
datetime.datetime(2022, 12, 1, 0, 0),
datetime.datetime(2022, 12, 2, 0, 0),
datetime.datetime(2022, 12, 3, 0, 0)]

2.対象月の月末を取得

関数定義:

input: 対象月の年、月
output: 対象月の月末 ※datetime

from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta

def get_end_of_month(year: int, month: int) -> datetime:
    # 対象月の初日
    begin_dt = datetime(year, month, 1)
    # 翌月の初日
    next_dt = begin_dt + relativedelta(months=1)
    # 翌月の前日(=対象月の末日)
    end_dt = next_dt + timedelta(days=-1)
    return end_dt

実行列:

year = 2021
month = 11
get_end_of_month(year, month)

実行例の出力:

datetime.datetime(2021, 11, 30, 0, 0)

By clear

データエンジニア・機械学習・分析等を主とし、Webアプリ開発も行っているフリーランスです。