为什么不只使用往返(“ O”,“ o”)格式说明符?
“ O”或“ o”标准格式说明符使用保留时区信息并发出符合ISO 8601的结果字符串的模式表示自定义日期和时间格式字符串。对于DateTime值,此格式说明符旨在保留日期和时间值以及文本中的DateTime.Kind属性。如果将styles参数设置为DateTimeStyles.RoundtripKind,则可以使用DateTime.Parse(String,IFormatProvider,DateTimeStyles)或DateTime.ParseExact方法来解析格式化的字符串。
标准格式说明符“ O”或“ o”对应于DateTime值的自定义格式字符串“ yyyy'-'MM'-'dd'T'HH':'mm':'ss'。'fffffffK” DateTimeOffset值的“ yyyy'-'MM'-'dd'T'HH':'mm':'ss'。'fffffffzzz”自定义格式字符串。在此字符串中,用单引号对界定单个字符(例如,连字符,冒号和字母“ T”),表示单个字符是不能更改的文字。撇号不会出现在输出字符串中。
O”或“ o”标准格式说明符(以及“ yyyy'-'MM'-'dd'T'HH':'mm':'ss'。'fffffffK”自定义格式字符串)利用了三种方式ISO 8601代表时区信息以保留DateTime值的Kind属性:
public class Example
{
public static void Main()
{
DateTime dat = new DateTime(2009, 6, 15, 13, 45, 30,
DateTimeKind.Unspecified);
Console.WriteLine("{0} ({1}) --> {0:O}", dat, dat.Kind);
DateTime uDat = new DateTime(2009, 6, 15, 13, 45, 30,
DateTimeKind.Utc);
Console.WriteLine("{0} ({1}) --> {0:O}", uDat, uDat.Kind);
DateTime lDat = new DateTime(2009, 6, 15, 13, 45, 30,
DateTimeKind.Local);
Console.WriteLine("{0} ({1}) --> {0:O}\n", lDat, lDat.Kind);
DateTimeOffset dto = new DateTimeOffset(lDat);
Console.WriteLine("{0} --> {0:O}", dto);
}
}