比较DateTimes与Unspecified和UTC种类

时间:2013-07-15 18:54:25

标签: c# datetime

我有两个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

2 个答案:

答案 0 :(得分:11)

  

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

烨。这是因为DateTime is a fundamentally broken type,IMO。基本上,Kind不用于比较。这样做很可能会破坏旧代码,并不总是你想要的。它已被添加到.NET 1.1中,并不总是以一种很好的方式 - 它绝对没有完全集成到您可能预期的每种方式,正如您所见的那样。

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

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

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

答案 1 :(得分:10)

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

  

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