質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

3171閲覧

日付の判定をする方法

maam

総合スコア55

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2019/01/07 05:28

Windows Forms で、コンボボックスを3つ用意し、誕生日を入力する画面を作成しています。
実行したいことは以下です。
・未来の日付を入力した場合はエラー
・不正な日付(例:2010/11/31)を入力した場合はエラー
・それ以外は確認画面(OK、キャンセル)を表示

label11にエラーメッセージが表示されるようにしています。

private void AddBt_Click(object sender, EventArgs e) {       string year = comboBox1.Text; string month = comboBox2.Text; string day = comboBox3.Text;             if (year != "" && month != "" && day != "") { int y = int.Parse(year); int m = int.Parse(month); int d = int.Parse(day); DateTime dt = DateTime.Now; int iYear = dt.Year; //現在の年を取得 int iMonth = dt.Month; //現在の月を取得 int iDay = dt.Day; //現在の日を取得 //生年月日が存在しない時 if (y > iYear) { label11.Text = "生年月日が不正です。"; return; } if (m > iMonth) { label11.Text = "生年月日が不正です。"; return; } else if (m <= iMonth && d > iDay) { label11.Text = "生年月日が不正です。"; return; } label11.Text = ""; } //メッセージボックスの表示 DialogResult result = MessageBox.Show("登録します。よろしいですか?",MessageBoxButtons.OKCancel);

現在ここまで書けています。これだと2018/1/10を選択すると、「10」に引っかかってしまうのか、エラーメッセージが出てしまいます。(※今日が7日だから?)
また、不正な日付を判断させるコードが書けていないので
アドバイスをいただければと思います。宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

年、月、日をyyyy/mm/ddと文字列化してDateTime.TryParseメソッドで判断すればよろしいかと

投稿2019/01/07 05:41

YAmaGNZ

総合スコア10258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

誕生日は未来日ではない、というのを調べるなら、yyyymmdd 形式にした時に、
{入力された日} <= {現在年月日} かどうか、が一番簡単に調べられる方法です。

日付が存在する日かどうかならば、月は 1~12 の間であることは前提として、日は月から(2月のみ年も考慮する)月末日が分かりますので、比較すればよいでしょう。
※月が1,3,5,7,8,10,12 のときと、4,6,9,11のときと、2のときとで切り分ける

投稿2019/01/07 05:41

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maam

2019/01/07 06:18

ご回答ありがとうございます。 3つのコンボボックスをyyyymmddの形式にするにはどうしたら良いのでしょうか…
tacsheaven

2019/01/07 06:33

コンボボックスからの入力は受け取っている(stringで)のですから、それを利用して文字列を作成するのですよ。 String.Format("{0:0000}{1:00}{2:00}", year, month, day); とか。
maam

2019/01/07 07:19

"{0:0000}{1:00}{2:00}"はどういう意味ですか?? 質問ばかりですみません。
YAmaGNZ

2019/01/07 07:23

「String.Format」で検索すればよろしいかと
maam

2019/01/07 08:32

意味がわかりました!ありがとうございます!
guest

0

日付に変換を行ってから現在日より未来かどうかを判定する方が簡潔です。
また、変換の過程でエラーをキャッチすれば不正な日付の判断もできます。
日時文字列をDateTimeオブジェクトに変換するサンプルプログラム

いっその入力を分けずに、DateTimePickerであればもっと簡単じゃないかと

投稿2019/01/07 05:41

sazi

総合スコア25188

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maam

2019/01/07 07:27

ご回答ありがとうございます。 コンボボックスを3つ使うことが条件なので、DateTimePickerは使えませんでした。 日付の変換とは具体的にどうすることなのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問