BUG:在 ToString("u") 方法中,当 DateTime 的 Kind 属性为 Local 时,不能自动转换为 UTC 时间,而导致返回的末尾跟“Z”的字符串表示为本地时间,末尾跟“Z”的字符串应当表示为 UTC 时间。
当 DateTime 的 Kind 属性为 Utc 时,则正常。
GB/T 7408-2005《数据元和交换格式 信息交换 日期和时间表示法》摘要:
5.1.2 标志符所用的字符
[Z] 协调世界时(UTC)标志符,直接跟在一数据元后面(没有间隔),用协调世界时表示该日的时间。
DateTime
1 DateTime n = DateTime.Now;
2 Console.WriteLine(n);//2010/3/15 14:07:41
3 Console.WriteLine(n.Kind);//Local
4 Console.WriteLine();
5
6 string s = n.ToString("u");
7 Console.WriteLine(s);//2010-03-15 14:07:41Z
8 DateTime t = DateTime.Parse(s);
9 Console.WriteLine(t);//2010/3/15 22:07:41
10 Console.WriteLine(t.Kind);//Local
11 Console.WriteLine();
12
13 string ss = n.ToString("o");
14 Console.WriteLine(ss);//2010-03-15T14:07:41.8178047+08:00
15 DateTime tt = DateTime.Parse(ss);
16 Console.WriteLine(tt);//2010/3/15 14:07:41
17 Console.WriteLine(tt.Kind);//Local
ToString("u") 后,末尾跟“Z”的字符串表示为本地时间。
Parse 时,认为末尾跟“Z”的字符串表示为 UTC 时间。
同一类中,不同方法中的对同一字符串的时间表示却不同!
其他格式都可以正常往返(“o”格式可以保留 Kind 属性,不降低精度),只有“u”格式相差8个小时,请问这是微软的 BUG 吗?请高手解答!
更多格式:http://hi.baidu.com/hongcing/blog/item/736bb6437b412f1972f05d70.html