金融関係のシステムを構築する場合に用意しなければいけないのが銀行営業日カレンダー。
例えば債券の受渡日から利払日までの経過日数などを計算する関数を用意するためには、あらかじめ銀行営業日のDBを準備しておくのが便利である。
例えば利払い日が休業日の場合、その日付を前後の営業日にずらして計算する必要があるからだ。他にもいろいろ銀行営業日を考慮する計算がたくさんあるだろう。
日本における銀行営業日とは、土日祝祭日と1月2日,1月3日,12月31日である。
カレンダーDBを用意して、銀行営業日か否かのフラグを持たせるのがよいだろう。
create table Calender
(
BaseDate datetime not null,
BusinessDateSign int not null
)
さて、その銀行営業日のフラグを設定するロジックがちょっと面倒である。
日曜日に祝祭日が重なった場合に月曜日が振り替え休日になるし、最近は成人の日のように「第○月曜日が祝日」(ハッピーマンデー)というようになっているからだ。
また、新しく祝祭日が増えたりすることもある。
■成人の日
1999年までは1月15日
2000年以降は1月の第2月曜日
■海の日
1996年から2002年まで7月20日
2003年以降は7月の第3月曜日
■敬老の日
2002年まで9月15日
2003年以降は9月の第3月曜日
■体育の日
1999年までは10月10日
2000年以降は10月の第2月曜日
さらに「春分の日」と「秋分の日」のことを考慮しなくてはならない。
「春分の日」は3月になるが、日にちは以下の計算式で求まる。(1980年から2099年まで)
Int( 20.8431 + 0.242194 * ( [yyyy] - 1980 ) - Int(([yyyy] - 1980)/4 ) )
「秋分の日」は9月になるが、日にちは以下の計算式で求まる。(1980年から2099年まで)
Int( 23.2488 + 0.242194 * ( [yyyy] - 1980 ) - Int(([yyyy] - 1980)/4 ) )
また、法改正で祝日の規定が変わった場合にはこのカレンダーDBを再構築する必要がある。
万年カレンダーを作るのも簡単ではない。