Jak przychodzą następujący kod (w C#) zwraca false:DateTime.Ticks, DateTime.Equals i stref czasowych
DateTime d = DateTime.Now;
d.Ticks == d.ToUniversalTime().Ticks; // false
będę oczekiwać kleszcze z DateTime być oparte na czas UTC. Na stronie MSDN na DateTime.Ticks wspomina mówi
Wartość tej właściwości reprezentuje liczbę odstępach 100-nanosekundowych, które upłynęły od 12:00:00 północy, 1 stycznia 0001, która reprezentuje DateTime.MinValue. Nie obejmuje liczby kleszczy, które można przypisać do sekund przestępnych.
Północ od pierwszego stycznia 0001 .. w której strefie czasowej?
Dlaczego funkcja DateTime.Ticks jest zależna od strefy czasowej?
Myślę, że fakt, że kleszcze są różne dlatego następujący kod zwraca również fałszywe
DateTime d = DateTime.Now;
d == d.ToUniversalTime(); // false
MSDN doc na DateTime.Equals wspomina
t1 i t2 są równe, jeśli ich własności kleszcze wartości są równe. Ich wartości właściwości Kind nie są uwzględniane w teście na równość.
Moje oczekiwania były takie, że DateTime.Ticks będzie równa, bez względu na strefę czasową.
Spodziewam się, że dwie chwile w czasie będą równe bez względu na to, w którym miejscu zdarzenia się pojawiły. Czy moje oczekiwania są błędne?
Należy pamiętać, że można użyć funkcji DateTimeOffset (http://msdn.microsoft.com/en-us/library/system.datetimeoffset.op_equality.aspx), która porównuje moment w czasie porównywania dwóch wystąpień. –
@ChrisShaffer Dzięki, myślę, że właśnie tego powinienem używać, ponieważ to, czego szukam, to dokładne momenty w czasie, a nie rzeczywiste "daty". – GuiSim