投稿日 | 2019/01/21(Mon) 22:30:16 |
---|---|
投稿者 | 通り道 |
参照先 |
こんにちは。
よくあるロジックを用いると、だいたい、以下のような感じになるともいます。
意外と、法令が変わったりするので、つど、ロジックの更新が必要です。
(祝日が増えた・減った程度ならば、ロジックはそのままで、祝日データリストの
更新・追記で対応可能なんですが)
-------
祝日情報とは
−祝日データリスト:配列={
{「月日固定」, 1, 1, 1949, 9999, 「元日」},
{「月日固定」, 1, 15, 1949, 1999, 「成人の日」},
{「第n月曜」, 1, 2, 2000, 9999, 「成人の日」},
{「月日固定」, 2, 11, 1967, 9999, 「建国記念の日」},
{「春分の日」, 3, 0, 1949, 9999, 「春分の日」},
{「月日固定」, 4, 29, 1949, 1989, 「天皇誕生日」},
{「月日固定」, 4, 29, 1990, 2006, 「みどりの日」},
{「月日固定」, 4, 29, 2007, 9999, 「昭和の日」},
{「月日固定」, 5, 3, 1949, 9999, 「憲法記念日」},
{「月日固定」, 5, 4, 1988, 2006, 「国民の休日」},
{「月日固定」, 5, 4, 2007, 9999, 「みどりの日」},
{「月日固定」, 5, 5, 1949, 9999, 「こどもの日」},
{「第n月曜」, 7, 3, 2003, 9999, 「海の日」},
{「月日固定」, 7, 20, 1996, 2002, 「海の日」},
{「月日固定」, 8, 11, 2016, 9999, 「山の日」},
{「秋分の日」, 9, 0, 1948, 9999, 「秋分の日」},
{「月日固定」, 9, 15, 1966, 2002, 「敬老の日」},
{「第n月曜」, 9, 3, 2003, 9999, 「敬老の日」},
{「月日固定」, 10, 10, 1966, 1999, 「体育の日」},
{「第n月曜」, 10, 2, 2000, 9999, 「体育の日」},
{「月日固定」, 11, 3, 1948, 9999, 「文化の日」},
{「月日固定」, 11, 23, 1948, 9999, 「勤労感謝の日」},
{「月日固定」, 12, 23, 1989, 9999, 「天皇誕生日」},
{「月日固定」, 4, 10, 1959, 1959, 「皇太子明仁親王の結婚の儀」},
{「月日固定」, 2, 24, 1989, 1989, 「昭和天皇の大喪の礼」},
{「月日固定」, 11, 12, 1990, 1990, 「即位礼正殿の儀」},
{「月日固定」, 6, 9, 1993, 1993, 「皇太子徳仁親王の結婚の儀」}
}
【自分】で【指定日:文字列】を祝日名取得する手順:文字列
【結果:文字列】は、自分で指定日を日時形式化したものを祝日名取得する
結果を返す
終わり
【自分】で【指定日:日時形式】を祝日名取得する手順:文字列
【対象日:日時形式】は、指定日の日付を日時形式化したもの
【結果:文字列】は、対象日を祝日該当日判定する
もし、結果が空でなければ、
結果を返す
もし終わり
結果は、対象日を振替休日判定する
もし、結果が空でなければ、
結果を返す
もし終わり
結果は、対象日を国民休日判定する
もし、結果が空でなければ、
結果を返す
もし終わり
結果を返す
終わり
−【対象日:日時形式】を祝日該当日判定する手順:文字列
【結果:文字列】は、空
祝日データリストを【祝日データ:配列】へそれぞれ繰り返す
祝日データ(1)について分岐
「月日固定」の場合
結果は、対象日を祝日データで月日固定判定
「第n月曜」の場合
結果は、対象日を祝日データでハッピーマンデー判定
「春分の日」の場合
結果は、対象日を祝日データで春分判定
「秋分の日」の場合
結果は、対象日を祝日データで秋分判定
分岐終わり
もし、結果が空でなければ
結果を返す
もし終わり
繰り返す終わり
結果を返す
終わり
−【対象日:日時形式】を振替休日判定する手順:文字列
【施行日:日時形式】は、「1973/04/12」を日時形式化する
もし、対象日<施行日ならば、
空を返す
もし終わり
もし、対象日を祝日該当日判定が空でなければ、
空を返す
もし終わり
【調査日数:整数】は、1
もし、対象日の年>2006ならば、
調査日数は、6
もし終わり
【調査日:日時形式】は、対象日から1日前
【振替:文字列】は、空
調査日数回、繰り返す
【結果:文字列】は、調査日を祝日該当日判定する
もし、結果が空でなければ、
もし、調査日の曜日が「日曜日」ならば、
振替は、結果
繰り返しを抜ける
もし終わり
調査日から1日引く
違えば
繰り返しを抜ける
もし終わり
繰り返す終わり
もし、振替が空でなければ、
「振替休日([振替])」を返す
もし終わり
空を返す
終わり
−【対象日:日時形式】を国民休日判定する手順:文字列
【施行日:日時形式】は、「2003/01/01」を日時形式化する
もし、対象日<施行日ならば、
空を返す
もし終わり
もし、対象日の曜日が「日曜日」ならば、
空を返す
もし終わり
もし、対象日を祝日該当日判定が空でなければ、
空を返す
もし終わり
もし、対象日から1日前を祝日該当日判定が空ならば、
空を返す
もし終わり
もし、対象日から1日後を祝日該当日判定が空ならば、
空を返す
もし終わり
「国民の休日」を返す
終わり
−【対象日:日時形式】を【祝日データ:配列】で月日固定判定する手順:文字列
もし、対象日が祝日データで対象年でなければ、
空を返す
もし終わり
もし、対象日の月=祝日データ(2)でなければ、
空を返す
もし終わり
もし、対象日の日=祝日データ(3)でなければ、
空を返す
もし終わり
祝日データ(6)を返す
終わり
−【対象日:日時形式】を【祝日データ:配列】でハッピーマンデー判定する手順:文字列
もし、対象日が祝日データで対象年でなければ、
空を返す
もし終わり
もし、対象日の月=祝日データ(2)でなければ、
空を返す
もし終わり
もし、対象日の曜日が「月曜日」でなければ、
空を返す
もし終わり
もし、対象日の日≦((祝日データ(3)-1)*7)ならば、
空を返す
もし終わり
もし、対象日の日>(祝日データ(3)*7)ならば、
空を返す
もし終わり
祝日データ(6)を返す
終わり
−【対象日:日時形式】を【祝日データ:配列】で春分判定する手順:文字列
もし、対象日が祝日データで対象年でなければ、
空を返す
もし終わり
もし、対象日の月=祝日データ(2)でなければ、
空を返す
もし終わり
【年:整数】は、対象日の年
【日:整数】は、(20.8431 + 0.242194 * (年 - 1980) - (((年 - 1980) / 4)を切り捨て))を切り捨て
もし、対象日の日=日でなければ、
空を返す
もし終わり
祝日データ(6)を返す
終わり
−【対象日:日時形式】を【祝日データ:配列】で秋分判定する手順:文字列
もし、対象日が祝日データで対象年でなければ、
空を返す
もし終わり
もし、対象日の月=祝日データ(2)でなければ、
空を返す
もし終わり
【年:整数】は、対象日の年
【日:整数】は、(23.2488 + 0.242194 * (年 - 1980) - (((年 - 1980) / 4)を切り捨て))を切り捨て
もし、対象日の日=日でなければ、
空を返す
もし終わり
祝日データ(6)を返す
終わり
−【対象日:日時形式】が【祝日データ:配列】で対象年する手順:真偽値
【年:整数】は、対象日の年
もし、年<祝日データ(4)または年>祝日データ(5)ならば
×を返す
もし終わり
○を返す
終わり
終わり
------
以下が、上記の種類を使用したサンプルプログラムです。
------
【対象日:日時形式】は、「2019/01/01」を日時形式化
【結果一覧:文字列】は、「」
【月退避:整数】は、対象日の月
365回、繰り返す
【結果:文字列】は、祝日情報で対象日を祝日名取得する
結果一覧は、結果一覧に「[対象日の日] [対象日の曜日] [結果] 」を加えたもの
対象日に1日足す
もし、月退避が対象日の月でなければ
結果一覧は、結果一覧に「[改行]」を加えたもの
月退避は、対象日の月
もし終わり
繰り返す終わり
結果一覧を表示する
------
- WebForum -