- 締切済み
c# ツェラーの公式を利用した計算方法
利用言語はc# ソフトはvisual studio2022を利用しています。 年・月・日をそれぞれ入力し、ツェラーの公式を利用して曜日を出したいのですがやり方が分からず困っています。 分かる方がいらっしゃいましたらお力を貸していただけましたら幸いです。 曜日の判定をする部分は以下で実現したいです。 Console.WriteLine("{0}曜日", g[dayofweek]);
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Hermit0914
- ベストアンサー率0% (0/0)
ここも間違えてた。 >年ー年÷100+年÷400 年+年÷4ー年÷100+年÷400 普通のうるう年を足すのを忘れてる。
- Hermit0914
- ベストアンサー率0% (0/0)
>1月を前年の13月、2月を前年の4月とします。 は、 1月を前年の13月、2月を前年の14月とします。 の間違いです。
- Hermit0914
- ベストアンサー率0% (0/0)
https://ja.wikipedia.org/wiki/%E3%83%84%E3%82%A7%E3%83%A9%E3%83%BC%E3%81%AE%E5%85%AC%E5%BC%8F にある公式をそのまま計算したらいいだけです。 変形と書かれている公式も、よく使われています。 簡単に言うと、1週間が7日であるのは変わらないので、 通算日の ジュリアン・デイ(ユリウス日)を、 7で割ったあまりが曜日に対応します。 2月29日を計算するのが面倒なので、 1月を前年の13月、2月を前年の4月とします。 1年を3月1日から14月28か29日にして、 経過日数を算出します。 7月と8月、12月と13月(翌年の1月)が31日が続くので 1か月を30×6÷5を小数点以下切り捨ての整数にして、5か月で周期させ、 その時が7月・8月の間、12月・13月の間に来るように 31日が2月続く様に適当に月を補正させ、 月終わりの1年の通算日数を計算させます。 これに、日付を入れて、翌月の日数を加算させ、 (適度の補正を入れることによって、) 年の計算を含めて曜日を合わせます。 年の計算ですが、 通年で、1年経過すると、同日は曜日が後ろに一つズレます。 それだけだったら、年を7で割るだけで曜日のずれが決まりますが、 うるう年があった場合1日増えるため、ふたつズレるので、 その年の補正で、年+うるう年で計算します。 うるう年は、4年に一回ありますが、100で割り切れる年は うるう年ではありません。ただし、400年に一回 100で割り切れてもうるう年にしています。 (地球の自転が割り切れない時間で回っているのでその補正のためです) ですから、 年ー年÷100+年÷400 (を7で割ったあまり)だけ、 年数によって、初日(3月1日)の曜日がずれます。 このズレた曜日と、先に計算した3月1日からの通算日数を足し、 それを7で割ったあまりが、曜日になります。 0の時の曜日から6まで対応させるか、 適度な数値を加算して、 0 の時の曜日を日曜日なり月曜日にするなりして、 曜日を算出します。 wiki の変形以外の変形で、 前年に回した1月・2月を特別扱いして、ここだけ補正値を入れるとか 1月を5月に見せかけると、同じ曜日になるとかの手もあります。 その場合、31日が2回続くのは、7月と8月の間1回だけなので、 特に5か月にこだわらず、それ以上でも構いません。 年の計算で、400年は、 400+400/4-400/100+400/400 =400+100-4+1=497になり、7で割り切れるので、(71) 年の数値を最初に400で割ったあまりだけにしてもいいです。 (1月・2月は先に前の年にしておく方が楽ですが)