C#令人迷惑的DateTime:世界标准时间还是本地时间?

先来看一段代码:

DateTime time = DateTime.Parse("2013-07-05 00:00:00");
Console.WriteLine(time.ToUniversalTime()); //2013/7/4 16:00:00
Console.WriteLine(time.ToLocalTime()); //2013/7/5 8:00:00

这让人搞不清楚DateTime的类型,当调用ToUniversalTime方法时,它似乎是本地时间,但调用ToLocalTime方法时,它又变成了世界标准时间(UTC) 。DateTime有个只读属性Kind,指示时间类型,输出看下:

Console.WriteLine(time.Kind); //DateTimeKind.Unspecified

DateTimeKind.Unspecified表示时间既未指定为本地时间,也未指定为世界标准时间 -_-#,好在,C#有提供方法让指定DateTime类型:

DateTime time = DateTime.SpecifyKind(DateTime.Parse("2013-07-05 00:00:00"), DateTimeKind.Local);
Console.WriteLine(time.ToUniversalTime()); //2013/7/4 16:00:00
Console.WriteLine(time.ToLocalTime()); //2013/7/5 0:00:00

这样声明一个本地时间显然比较麻烦,平时大都使用本地时间,不明白为什么不默认为本地时间,相比之下,Javascript就比较人性化,它的Date对象总是本地时间:

var time = new Date("2013-07-05 00:00:00");
document.writeln(time.toUTCString()); //Thu, 04 Jul 2013 16:00:00 GMT
document.writeln(time.toLocaleString()); //2013年7月5日 上午12:00:00


评论: 0 | 引用: 0 | 查看次数: 12949
发表评论
登录后再发表评论!