テキストボックスに入力された、日付っぽい文字列を日付型の変数へ代入する方法です。
ま、そもそも、コントロールをDateTimePickerなど、日付型にマッチしたコントロールを使え
って話もありますが、まぁまぁ、いろんなケースがあるということで・・・
2種類のパターンを知っておくとよいです。
Parse と ParseExact です
"20080409"
"2008/04/09"
この2つをみて、感覚的に 2008年4月9日 だな・・
と、想像できるのは、日本で暮らしているから。ということですね。
日本語的に日付ですという情報を渡さなければならない場合にParseExactを使います。
ということで、例
string s1 = "2008/04/09";
DateTime dt1 = DateTime.Parse(s1);
string s2 = "20080409";
DateTime dt2 = DateTime.ParseExact(s2, "yyyyMMdd", DateTimeFormatInfo.CurrentInfo);
ウォッチ ウィンドウの値
+ dt1 {2008/04/09 0:00:00} System.DateTime
+ dt2 {2008/04/09 0:00:00} System.DateTime
.NET Framework 2.0 からは、TryParse も使えます。TryParseExactもちゃんと用意されてますね。
string s3 = "2008/04/31";
DateTime dt3;
if (DateTime.TryParse(s3, out dt3) == false)
{
Console.WriteLine(s3 + "は日付のデータではありません");
}
string s4 = "20080431";
DateTime dt4;
if (DateTime.TryParseExact(s4, "yyyyMMdd", DateTimeFormatInfo.CurrentInfo, DateTimeStyles.None, out dt4) == false)
{
Console.WriteLine(s4 + "は日付のデータではありません");
}
実行結果
2008/04/31は日付のデータではありません
20080431は日付のデータではありません
ウォッチ ウィンドウの値
+ dt3 {0001/01/01 0:00:00} System.DateTime
+ dt4 {0001/01/01 0:00:00} System.DateTime
TryParseExact の第四引数の、DateTimeStyles の使い方もチェックですね。
あ。OSのロケール設定が日本語以外の場合、このコードだと違う結果になりますのでご注意を
なお、DateTimeFormatInfo は、System.Globalization 名前空間 にあるので、using 忘れにご注意を