文字列からDateTime・DateTimeOffsetへの変換には、Parseメソッドの他にもTryParseメソッドを使うことができます。 このメソッドでは変換できない場合にFormatExceptionをスローする代わりに、単に変換できなかったことを表すfalse
を返します。 、DateTime・DateTimeOffsetに変換できた場合はTryParseメソッドの第二引数であるoutパラメータに変換結果が代入され、戻り値としてtrue
が返されます。
DateTime/DateTimeOffset.TryParseメソッドで文字列からの変換を試みる
using System;
class Sample {
static void Main()
{
var inputs = new string[] {
"29 Feb 2012",
"31 Feb 2013", // 存在しない日付
"27:00:00", // 時刻が最小(0:0:0)〜最大(23:59:59)の範囲外
"2013-04-01T15:00:30.1230000+15:00", // オフセットが最小・最大(±14:00)の範囲外
"0123456", // 日時として判別できない文字列
};
foreach (var input in inputs) {
DateTime dt;
// 文字列からDateTimeへの変換を試みる
if (DateTime.TryParse(input, out dt))
Console.WriteLine("{0,-35} -> {1}", input, dt);
else
Console.WriteLine("{0,-35} -> (invalid format)", input);
}
Console.WriteLine();
foreach (var input in inputs) {
DateTimeOffset dto;
// 文字列からDateTimeOffsetへの変換を試みる
if (DateTimeOffset.TryParse(input, out dto))
Console.WriteLine("{0,-35} -> {1}", input, dto);
else
Console.WriteLine("{0,-35} -> (invalid format)", input);
}
Console.WriteLine();
}
}
実行結果
29 Feb 2012 -> 2012/02/29 0:00:00 31 Feb 2013 -> (invalid format) 27:00:00 -> (invalid format) 2013-04-01T15:00:30.1230000+15:00 -> 2013/04/02 0:00:30 0123456 -> (invalid format) 29 Feb 2012 -> 2012/02/29 0:00:00 +09:00 31 Feb 2013 -> (invalid format) 27:00:00 -> (invalid format) 2013-04-01T15:00:30.1230000+15:00 -> (invalid format) 0123456 -> (invalid format)