说明]
本法具有占用 ROM 小 , 运算速快的特点,范围 2000 ßà 2099 共 100 年;
只要输入年月日便可直接得出相应的星期,一步到位!
算法]
1. 0 à 6 表示星期天到星期六 .
2. 平年有 365 天 , 闰年有 366 天 . 而一星期 7 天, 365 mod 7=1,365 mod 7=2, 那么, N 年与( N+1 )分别相差 +1 和 + ( 1+1 )天。
3. 已知 :2000.01.01 是星期六 .
4. 作一张数据表 : 要求这年 1 月 1 日是星期六且是非闰年 ( 平年 — 选用 2005 年正好 ) 给出每月的 1 日星期数 :
DB 0FFH, 06H, 02H, 02H, 05H, 00H, 03H, 05H, 01H, 04H, 06H, 02H, 04H; (first data is useless)
5 .比如求 Y1Y0 年 M 月 D 日的星期 .
6 .那么根据 M 可查得相对的 M 月 1 日的星期数,为 X .
7 .所以 M 月 D 日为 星期 (X+(D-1))MOD 7 .
8 由于从 2000 年 M 月 D 日到 Y1Y0 年 M 月 D 日所经历的闰二月数共为 : (Y1Y0-2000+3)/4+(Y1Y0-2000)+ ( Y1Y0 年是闰年且 M>2 ) .
所以整个公式为 : 这天是
星期 [(X+(D-1))+ (Y1Y0-2000+3)/4+(Y1Y0-2000)+Y1Y0 年是闰年且 M 月 >2] MOD 7
smile
Tuesday, March 12, 2002