比较DateTimes与Unspecified和UTC种类

我有2个DateTime值:

date1 < – {15-07-13 20:45:10},Kind =未指定

date2 < – {15-07-13 20:45:10},Kind = UTC

比较这两个日期时,两个日期是相等的。

 if (DateTime.Compare(date1, date2)!=0) ... 

有人可以解释为什么吗?

对我来说有点奇怪:将date1(未指定种类)转换为UTC时,我清楚地看到日期不同:

date1.ToUniversalTime() – > {15-07-13 18:45:10},Kind = UTC

有人可以解释我为什么吗?

对。 这是因为DateTime是一种根本破碎的类型 ,IMO。 基本上, Kind不用于比较。 这样做很可能会破坏旧代码,并不总是你想要的。 它已被添加到.NET 1.1中,并不总是以一种很好的方式 – 它绝对没有完全集成到您可能预期的各种方式,正如您已经看到的那样进行比较。

作为另一个例子,即使对于Kind Local (它意味着系统本地时区),它也被算术忽略,这意味着AddHours(1)的调用实际上只增加了本地时间,而不是它代表经过的时间(这可能最终是当地时间相同或两小时后的当地时间,在DST过渡期间)。

我的建议是避免首先比较不同种类的DateTime值。 这几乎不是你想要做的。

(当然我也建议使用Noda Time ,但这有点不同。)

DateTimeKind上的文档(重点是我的):

DateTimeKind枚举的成员用于本地时间和协调世界时(UTC)之间的转换操作, 但不用于比较或算术运算