0.初めに
国内株などに投資をして、記録をつけていると、ある期間の営業日数を知りたくなる。
1.仕様
土日に加え、祝日を差し引く。
しかしこれでは証券市場・金融機関の休みに対応できない
12/31,1/2,1/3を差し引く
役所の休みは
12/29,12/30を差し引く
11/22から11/22を指定したら1日と返してほしい。0日ではない。
2.jpholiday,workdaysをインストールする
コマンドプロンプトで
pip install jpholiday
pip install workdays
を入力
3.サンプルプログラム
任意の日付から任意の日付までの日数
import datetime
import jpholiday
import workdays
start_date = datetime.datetime(2023,1,1)
end_date = datetime.datetime(2023,11,23)
holidays =[datetime.datetime(2023,1,2),datetime.datetime(2023,1,3),datetime.datetime(2023,12,31),datetime.datetime(2024,1,2),datetime.datetime(2024,1,3)]
print(workdays.networkdays(start_date, end_date))#祝日を除く前
for holiday in jpholiday.year_holidays(2023):
holidays.append(datetime.datetime.fromordinal(holiday[0].toordinal()))
print(workdays.networkdays(start_date, end_date,holidays))#祝日を除く
234
219
年初から今日(作成日は2023,11,23)までの日数
import datetime
import jpholiday
import workdays
this_year= datetime.date.today().year
start_date = datetime.datetime(this_year,1,1)
end_date = datetime.datetime.now()
holidays =[datetime.datetime(this_year,1,2),datetime.datetime(this_year,1,3),datetime.datetime(this_year,12,31)]
print(workdays.networkdays(start_date, end_date))#祝日を除く前
for holiday in jpholiday.year_holidays(this_year):
holidays.append(datetime.datetime.fromordinal(holiday[0].toordinal()))
print(workdays.networkdays(start_date, end_date,holidays))#祝日を除く
234
219
4.その他工夫点
役所の休みを追加したい場合は宣言に12/29,12/30を追加する
holidays =[略,datetime.datetime(this_year,12,29),datetime.datetime(this_year,12,30)]
逆に12/31,1/2,1/3を除かなければ純粋な祝日のみを、、、
(#祝日を除く前-#祝日を除く)を実装すれば、期間の実質的な祝日を数えられるな。
参照先
https://github.com/Lalcs/jpholiday
https://pypi.org/project/workdays/
↓でデバッグできる
https://keisan.casio.jp/exec/system/1251167854
5.お願い
もっとスマートな方法を知ってるよ
そういう方おられましたら教えてください。