.Net DateTime错误?或者只是设计不佳

时间:2012-06-05 13:04:33

标签: .net datetime

这种行为导致我在过去一周浪费了大量时间。有没有人解释为什么这是这样设计的?| (我在PST,所以DST Offset现在是+7)

var utc = new DateTime(2012, 6, 5, 9, 0, 0, DateTimeKind.Utc);  
var lcl = new DateTime(2012, 6, 5, 8, 0, 0, DateTimeKind.Local);  // this is 15:00 Utc
Assert.IsTrue(lcl.ToUniversalTime() > utc);   //  THIS SUCCEEDS  (as it should)
Assert.IsTrue(lcl > utc);                     //  THIS FAILS (with the same times!!!)

这令人困惑,因为在我的实际代码中,类型设置为DateTimeKind.Local的变量最初使用DateTimeKind.Utc(在另一台机器上)设置但是在网络之后被评估转移到正在进行比较的机器,并在传输(使用net.tcp远程处理)时更改了类型。

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

这不是一个错误,它是一个“功能”。

DateTime类型不知道时区,因此没有明智的方法来比较Kind属性(可以是“Unspecified”,“Local”或“Utc”)。实际上在.NET 1.x中它甚至没有Kind属性。

如果您需要比较来自不同时区的日期/时间值,则需要使用知道时区的类型,例如DateTimeOffset