using System;
using System.Globalization;
class Sample {
static void Main()
{
var format = "yyyy-M-d"; // "年-月-日"(0埋めなし)の書式
var inputs = new string[] {
// ISO8601形式の文字列
"2013-04-01", // 空白を含まない
" 2013-04-01", // 空白が先行する
"2013-04-01 ", // 空白が後続する
" 2013-04-01 ", // 前後に空白がある
"2013- 4-01", // 年と月の間に空白がある
"2013 - 4 - 1", // 年月日と区切り記号の間に空白がある
" 2013 -4 - 1 ", // 上記の例の複合
};
var styles = new DateTimeStyles[] {
DateTimeStyles.None,
DateTimeStyles.AllowLeadingWhite,
DateTimeStyles.AllowTrailingWhite,
DateTimeStyles.AllowInnerWhite,
DateTimeStyles.AllowWhiteSpaces,
};
// DateTimeStylesとDateTimeへの変換結果の違いを表示
Console.WriteLine("DateTime.ParseExact");
Console.WriteLine("{0,-20}|{1,-22}|{2,-22}|{3,-22}|{4,-22}|{5,-22}",
"(input)",
"None",
"AllowLeadingWhite",
"AllowTrailingWhite",
"AllowInnerWhite",
"AllowWhiteSpaces");
foreach (var input in inputs) {
Console.Write("{0,-20}|", "'" + input + "'");
foreach (DateTimeStyles style in styles) {
DateTime dt;
if (DateTime.TryParseExact(input, format, null, style, out dt))
Console.Write("{0,-22}|", dt);
else
Console.Write("{0,-22}|", "(false)");
}
Console.WriteLine();
}
Console.WriteLine();
// DateTimeStylesとDateTimeOffsetへの変換結果の違いを表示
Console.WriteLine("DateTimeOffset.ParseExact");
Console.WriteLine("{0,-20}|{1,-28}|{2,-28}|{3,-28}|{4,-28}|{5,-28}",
"(input)",
"None",
"AllowLeadingWhite",
"AllowTrailingWhite",
"AllowInnerWhite",
"AllowWhiteSpaces");
foreach (var input in inputs) {
Console.Write("{0,-20}|", "'" + input + "'");
foreach (DateTimeStyles style in styles) {
DateTimeOffset dto;
if (DateTimeOffset.TryParseExact(input, format, null, DateTimeStyles.AssumeLocal | style, out dto))
Console.Write("{0,-28}|", dto);
else
Console.Write("{0,-28}|", "(false)");
}
Console.WriteLine();
}
Console.WriteLine();
}
}