バッチサンプル(その6)[PR]ジャマイカの歴史に寄り添うレゲエUpdate:バッチ処理サンプル(その6)日付計算(再)特定の曜日や日付を除いた日数(営業日数や平日の日数など)の計算2つの日付から日数を求める処理は比較的簡単ですが、特定の日付や曜日を除いた日数計算は多少複雑なものとなります。休日や曜日を除外するには除外する日の指定方法を工夫する必要があります。ここでは、除外する日を曜日「w0〜w6」、週数曜日「m週数曜日」、月の日付「d日付」、月日「y月日」のように指定して該当する日付かどうかチェックします。2000、XPで使えるようになったバッチ引数や環境変数の拡張機能を利用して処理のパターン化を行います。たいした処理はしていませんが、何かの参考や役に立てば幸いです。9x/meでは利用できません。計算の開始日と終了日を指定し、その間の営業日数と休日日数(休業日数)を求めます。必要に応じて、計算の経過表示や振替休日の設定を行えるようにします。●処理の条件1.休日の種類と指定方法は次の通りとします。ア.毎週固定曜日で指定する休日(w0:日曜、w1:月曜、w2:火曜、w3:水曜、w4:木曜、w5:金曜、w6:土曜)イ.毎月固定の日数で指定する休日(d日数、日数:01〜31)ウ.週数曜日で指定する休日(m週数曜日数、週数:1〜6、曜日数:0(日曜)〜6(土曜))エ.月日指定の休日(y月日、月:01(1月)〜12(12月)、日:01(1日)〜31(31日))オ.月週数曜日で指定する休日(h月週数曜日数、月:01〜12、週数:1〜6、曜日数:0〜6)カ.例外日(休日としない日)(e月日、月:01〜12、日:01〜31)2.振替休日は、あり/なしを選択できるように環境変数を設定しておくものとします。3.振替休日は、ア.毎週固定曜日の休日とイ.〜オ.で指定される休日が重なった場合のみ翌日を休日に設定します。4.休日は、バッチファイルの環境変数に直接設定します。5.計算の開始日と終了日はキーボードから入力します。6.計算の開始日と終了日は、半角数字で西暦年数(4ケタ)月(2ケタ)日(2ケタ)を半角記号「/、−、.」で区切って入力します。(例)2014/01/05→西暦2014年1月5日7.計算の開始日と終了日は2001/01/01(2001年1月1日)〜2100/12/31(2100年12月31日)の範囲で設定するものとします。8.計算の開始日が終了日よりも大きい場合は、開始日と終了日を入れ替えて計算するものとします。9.計算の途中経過の表示は、する/しないを選択できるように環境変数を設定しておくものとします。10.計算結果は、計算の対象期間の日数と営業日の日数、休業日の日数を表示します。はい:振替休日の候補としてフラグをセットする。いいえ:何もしない(次へ)2−1−3.いいえ:営業日の日数+1→営業日の日数2−2.検査結果を表示するか?2−2−1.はい:検査対象日と検査結果(休日または営業日)を表示する。2−2−2.いいえ:何もしない(次へ)3.検査対象日の日数と営業日、休日を表示する。(wdayに設定した休業日とほかの休業日が重なった場合は翌日を振替休日とします。検査日付の表示(チェックした日付を表示します。引数ので与えられた日(西暦1年1月1日からの通算日数)が休日かどうかを調べます。10000倍することで、1年の日数を365.2425→3652425で表します。引数で与えられた日付の曜日を求めます。閏年のチェックを行います。年初(1月1日)から各月の朔日(1日:ついたち)までの経過日数を使い月数を求めます。月数が2月以下なら閏日は算入しません。dの日数を2桁表示でddに設定します。mの月数を2桁表示でmmに設定します。ymdwに年月日[曜日]を設定します。休日チェックのデータを作ります。休日のチェックリストとなる文字列を作成します。曜日での休業日であることを示すフラグをリセットしておきます。チェック対象の曜日が曜日のリストにあれば、削除します。曜日のチェック文字列と休業日のリスト文字列が一致しなければ、休業日とします。日数で休業日のチェックを行います。週数と曜日で休業日のチェックを行います。月日で休業日のチェックを行います。月と週数と曜日で休業日のチェックを行います。月日で休業日としない(営業日となる)例外日のチェックを行います。flg)営業日に1を加える。flg)h_flgを_にセットする。日付と"休"または"_"(=営業日)を表示する。flgを1(振替休日の候補)に、違っていればflgを0にセットする。flgを0にセットする。開始日の前日が休業日であるかチェックする。西暦年、月、日から西暦元年(1年)1月1日(=1日)からの通算日数を求めます。日付(yyyy/mm/dd)をy年(yyyy)、m月(mm)、d日(dd)に分解します。環境変数eとsの内容を入れ替えます。1年の中で各月の1日までに経過している日数(=前月の末日までの日数)を求めます。閏年のチェックを行い、閏年であればuruuを1に、閏年でなければuruuを0にセットします。エラーメッセージを表示します。開始年は2001年以上2100年以下で設定してください。開始年は2001年以上2100年以下で設定してください。開始月は1以上12以下で設定してください。開始月は1以上12以下で設定してください。開始日は1以上%%md[%sm%]%%以下で設定してください。開始日は1以上%%md[%sm%]%%以下で設定してください。終了年は2001年以上2100年以下で設定してください。終了年は2001年以上2100年以下で設定してください。終了月は1以上12以下で設定してください。終了月は1以上12以下で設定してください。終了日は1以上%%md[%em%]%%以下で設定してください。終了日は1以上%%md[%em%]%%以下で設定してください。ページを閉じる連絡先:お問い合わせフォーム。