【发布时间】:2015-04-20 14:16:47
【问题描述】:
DateTime d1=new DateTime(2015, 1, 1, 0, 0, 0, DateTimeKind.Utc);
DateTime d2=new DateTime(2015, 1, 1, 0, 0, 0, DateTimeKind.Local);
Console.WriteLine(d1==d2); // prints true
Console.WriteLine(d1<d2); // prints false
Console.WriteLine(d1.CompareTo(d2)); // prints 0
Console.WriteLine(d1.ToUniversalTime()==d2.ToUniversalTime()); // prints false
这对我来说似乎是一个错误,如果不是 color me surprised。
每次比较都必须调用 ToUniversalTime() 还是有更好的选择?
如何避免因 DateTimeKind.Unspecified 而导致忘记调用 ToUniversalTime() 或得到错误结果等陷阱?
【问题讨论】:
-
不完全,它在文档中 - 您必须确保时间在同一时区。此外,
DateTime不包含任何时区信息。为此,您需要DateTimeOffset -
Docs 明确说明了这一点在比较 DateTime 对象之前,请确保对象代表同一时区的时间。您可以通过比较它们的 Kind 属性的值来做到这一点。
-
NodaTime救援 :) -
和here's the actual source 显示比较实际上是多么简单。