洪星的博客(原创版,新闻除外)

信息技术 软件开发 电信 移动通信(欢迎和我交流:QQ219402,15152399197)

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

posted on 2010-03-14 20:20  洪星  阅读(3245)  评论(22编辑  收藏  举报