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
To wygląda jak błąd dla mnie, jeśli nie color me surprised.DateTime Porównaj Ignores Kind?
Czy muszę wywoływać ToUniversalTime() dla każdego porównania lub czy istnieje lepsza alternatywa?
W jaki sposób uniknąć pułapek, takich jak zapomnienie wywołania ToUniversalTime() lub uzyskanie złego wyniku z powodu DateTimeKind.Unspecified?
Nie * dokładnie *, jest w dokumentacji - musisz upewnić się, że czasy są w tej samej strefie czasowej. Poza tym 'DateTime' nie zawiera żadnych informacji o strefie czasowej. Potrzebujesz "DateTimeOffset" do tego –
Dokumenty wyraźnie stwierdzają, że * Przed porównaniem obiektów DateTime, upewnij się, że obiekty reprezentują czasy w tej samej strefie czasowej. Możesz to zrobić, porównując wartości ich właściwości Kind. * –
'NodaTime' na ratunek :) – tchrikch