ヤフー知恵袋で西暦年、月、日から曜日を求めるための質問がされているのですが、かなり面倒くさい方法で計算しています。
西暦年、月、日から曜日を求めるWindowsフォームアプリケーションをC#で作… – Yahoo!知恵袋
まず現在西暦何年であるのかを求めて、その年が閏年かどうかを調べています。そして月と日から曜日を求めています。
またベストアンサーでは曜日計算に「ツェラーの公式」を使う方法を紹介しています。
ちなみにツェラーの公式がどのようなものかは ツェラーの公式の解説で説明されています。
しかしツェラーの公式を知らなくても、その日の曜日を知る方法はあります。それはDateTimeクラスを使う方法です。
アプリの仕様として、西暦年、月、日を入力してボタンを押せば曜日を表示するという簡単なものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { try { // TextBoxになにも入力されていない場合、数字以外のものが入力されている場合、 // 例外が発生するので対策が必要 int year = int.Parse(textBoxYear.Text); int month = int.Parse(textBoxMonth.Text); int day = int.Parse(textBoxDay.Text); DateTime date = new DateTime(year, month, day); System.DayOfWeek week = date.DayOfWeek; // こんな方法でやらなくても striing weekString = week.ToString() でもOK string weekString = ""; if(week == DayOfWeek.Sunday) weekString = "日曜日"; if(week == DayOfWeek.Monday) weekString = "月曜日"; if(week == DayOfWeek.Tuesday) weekString = "火曜日"; if(week == DayOfWeek.Wednesday) weekString = "水曜日"; if(week == DayOfWeek.Thursday) weekString = "木曜日"; if(week == DayOfWeek.Friday) weekString = "金曜日"; if(week == DayOfWeek.Saturday) weekString = "土曜日"; MessageBox.Show(weekString, "結果"); } catch { MessageBox.Show("年月日が正しく設定されていません!", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } |
では2345年6月7日は何曜日になるのか、実際に作成したアプリケーションでどうなるのかやってみましょう。
「木曜日」という結果になりました。
ではツェラーの公式を使った場合と結果は一致するのでしょうか? YouTubeの動画でこんなものが見つかりました。最後まで見ていただければわかりますが、「木曜日」という結論がでています。
【ツェラーの公式解説】2345年6月7日は何曜日か?
ツェラーの公式自体は面白いので一見の価値は充分にあります。ただC#プログラミングで曜日を求めよという課題の答えとしては手間がかかりすぎます。