1

这种行为导致我在过去一周浪费了大量时间。有没有人解释一下为什么会这样设计???|
(我在 PST,所以 DST 偏移现在是 +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!!!)

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

4

2 回答 2

3

这是已知的,并且与此相关:http: //msmvps.com/blogs/jon_skeet/archive/2012/05/02/more-fun-with-datetime.aspx

于 2012-06-05T13:06:34.300 回答
0

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

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

如果您需要比较不同时区的日期/时间值,则需要使用可识别时区的类型,例如DateTimeOffset.

于 2012-06-05T13:57:56.470 回答