将DateTimes与未指定类型和UTC类型进行比较



我有两个DateTime值:

日期1<-{15-07-13 20:45:10}带有Kind=未指定

日期2<-{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添加的,但并不总是以一种很好的方式添加——它肯定没有以你所期望的方式完全集成,正如你在比较中看到的那样。

作为另一个例子,即使对于LocalKind(意味着是系统本地时区),它在算术上也会被忽略,这意味着AddHours(1)的调用实际上只增加了本地时间,而不是代表经过的时间(它可能是相同的本地时间,或者在本地时间的两个小时后,在夏令时转换前后)。

我的建议是首先避免比较不同类型的DateTime值。这几乎从来都不是你想做的。

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

来自DateTimeKind的文档(重点是我的):

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

最新更新