タイトル | : 曜日を算出する ツェラーの式 |
投稿日 | : 2023/11/23(木) 14:38 |
投稿者 | : konno | 番 号 | : 10949 10946 番 konno さんへのコメント |
新祝日法対応のためには指定した曜日を計算して特定する必要があります。 私の頭では全く思いつきません。(;_;) 困ったときのめざら資源、探したらありました! \(^^)/ アッタ- めざら資源>VZマクロ工房>文字列出力関連>七曜でふ−簡易版日付印字器 sitiyo.def 3: ;指定日の曜日を算出(ツェラーの式) (m<3)?{ y--, m+=12, } w=((y+ y/4+ y/400+ (m*13+8)/5+ 1- y/100) +d -1) %7, なるほど、指定日の曜日を算出する、ツェラーの式というのがあるのですね。 マクロをBASICに置き換えてみました。式はほぼそのままですね。 'a1=1〜4(週) 'a2=1〜7(曜日) ww=0 for d=1 to 31 if m<3 then y=y-1:m=m+12 w=((y+ y/4+ y/400+ (m*13+8)/5+ 1- y/100) +d -1) mod 7 if w=a2 then ww=ww+1 if ww=a1 then dd=d:goto 30612 next d 30612 return 実際に実装したルーチンも貼り付けます。 30611 '指定日の曜日を算出(ツェラーの式) AA1=ASC(MID$(A$,4,1))-64 '1〜4(週) AA2=ASC(MID$(A$,5,1))-64 '1〜7(曜日) WW9=0 M9=YASM(YMAX) '該当祝日の月 Y9=YEAR '該当祝日の年 for D9=1 to 31 if M9<3 then Y9=Y9-1:M9=M9+12 'sitiyo.def W9=((Y9+ Y9/4+ Y9/400+ (M9*13+8)/5+ 1- Y9/100) +D9 -1) MOD 7 'ツェラーの式 'W9=(Y9+ Y9/4+ Y9/400+ (M9*13+8)/5+ D9- Y9/100) MOD 7 '同等の式? if W9<>AA2 then 30613 '曜日が一致するまで日を進める WW9=WW9+1 '曜日が一致したら週を進める if WW9<AA1 then 30613 '週が一致するまで進める YASD(YMAX)=D9:goto 30614 '日が確定したらデータに入れる 30613 next D9 30614 'print co9;a$;" ";Y9;M9;AA1;AA2;W9;D9 'debug return コメントを書くとフローのミスにも気が付きやすいですね。(^^; 一応動くようになったのですが、何故か年を変えても今年の年で計算してしまいます。(>_<) どうしよう・・・ 続く・・・のか
- No.10949 一括表示へ - コメント元:10946 一括表示へ - [ 返信 ] [引用無し] pre