西暦 y 年 m 月 d 日の曜日は、
(y + floor(y / 4) - floor(y / 100) + floor(y / 400) + floor(2.6 * m + 1.6) + d) mod 7
の値が0なら日曜日、1なら月曜日、2なら火曜日、……、6なら土曜日である。ただし1月、2月はそれぞれ前年の13月、14月と見なす。これはZeller(ツェラー)の公式と呼ばれるものの一種である。

現在採用されているグレゴリオ暦はローマ教皇Gregory XIII(グレゴリウス13世)が採用した。その初日は1582年10月15日(金曜日)である。上の公式はこの日以後の正しい曜日を与える。

dayweek.cの移植。AB 4.24.00で動作確認。

#strict
#prompt

Dim year As Long, month As Long, day As Long, dayOfWeek As Long
Dim name[ELM(7)] = [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Suturday",
] As BytePtr

Print "Year ?"; :Input year
Print "Month?"; :Input month
Print "Day ?"; :Input day
If month < 3 Then
year--
month += 12
End If
dayOfWeek = (year + year \ 4 - year \ 100 + year \ 400 + (13 * month + 8) \ 5 + day) Mod 7
Print "It's"; MakeStr(name[dayOfWeek])

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2010年01月25日 19:00