将DateTimes与未指定类型和UTC类型进行比较
本文关键字:类型 比较 UTC 未指定 DateTimes | 更新日期: 2023-09-27 18:22:21
我有两个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添加的,但并不总是以一种很好的方式添加——它肯定没有以你所期望的方式完全集成,正如你在比较中看到的那样。
作为另一个例子,即使对于Local
的Kind
(意味着是系统本地时区),它在算术上也会被忽略,这意味着AddHours(1)
的调用实际上只增加了本地时间,而不是代表经过的时间(它可能是相同的本地时间,或者在本地时间的两个小时后,在夏令时转换前后)。
我的建议是首先避免比较不同类型的DateTime
值。这几乎从来都不是你想做的。
(当然,我也建议使用Noda Time,但这略有不同。)
来自DateTimeKind
的文档(重点是我的):
DateTimeKind枚举的成员用于转换本地时间和协调世界时(UTC)之间的操作,但不用于比较或算术运算。