ParseExact・TryParseExactメソッドで複数の書式を許容するようにしたい場合は、次の例のように、その書式を配列で指定します。 どれか一つでも一致する書式があれば、変換に成功します。
DateTime/DateTimeOffset.TryParseExactメソッドで複数の書式を指定して文字列からの変換を試みる
using System;
using System.Globalization;
class Sample {
static void Main()
{
var inputs = new string[] {
"Mon, 01 Apr 2013 15:00:30 GMT", // RFC1123形式の文字列
"2013年4月1日 15:00:30", // 一般的な形式の文字列
"2013-04-01T15:00:30.1230000+09:00", // ISO8601形式の文字列
"2013-04-01T15:00:30.1230000", // ISO8601形式の文字列 (オフセット無し)
"2013-04-01", // ISO8601形式の文字列 (日付のみ)
"15:00:30", // ISO8601形式の文字列 (時刻のみ)
};
// 変換時に許容する書式
var formats = new string[] {
"o", // 一般的な形式
"yyyy-MM-dd", // 日付のみの形式
"HH:mm:ss", // 時刻のみの形式
};
foreach (var input in inputs) {
DateTime dt;
// 指定した書式で文字列からDateTimeへの変換を試行
if (DateTime.TryParseExact(input, formats, null, DateTimeStyles.None, 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.TryParseExact(input, formats, null, DateTimeStyles.None, out dto))
Console.WriteLine("{0,-35} -> {1}", input, dto);
else
Console.WriteLine("{0,-35} -> (invalid format)", input);
}
Console.WriteLine();
}
}
実行結果
Mon, 01 Apr 2013 15:00:30 GMT -> (invalid format) 2013年4月1日 15:00:30 -> (invalid format) 2013-04-01T15:00:30.1230000+09:00 -> 2013/04/01 15:00:30 2013-04-01T15:00:30.1230000 -> 2013/04/01 15:00:30 2013-04-01 -> 2013/04/01 0:00:00 15:00:30 -> 2013/03/08 15:00:30 Mon, 01 Apr 2013 15:00:30 GMT -> (invalid format) 2013年4月1日 15:00:30 -> (invalid format) 2013-04-01T15:00:30.1230000+09:00 -> 2013/04/01 15:00:30 +09:00 2013-04-01T15:00:30.1230000 -> 2013/04/01 15:00:30 +09:00 2013-04-01 -> 2013/04/01 0:00:00 +09:00 15:00:30 -> 2013/03/08 15:00:30 +09:00