LoginSignup
0
0

[Python] 土日祝日を除いた営業日の数を調べる

Last updated at Posted at 2023-11-23

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.サンプルプログラム

任意の日付から任意の日付までの日数

business_day.py
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))#祝日を除く
business_day.pyの結果
234
219

年初から今日(作成日は2023,11,23)までの日数

business_day.py
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))#祝日を除く
business_day.pyの結果
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.お願い

もっとスマートな方法を知ってるよ
そういう方おられましたら教えてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0