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
Điều này giống như một lỗi đối với tôi, nếu không phải là color me surprised.DateTime So sánh Bỏ qua Loại?
Tôi có phải gọi ToUniversalTime() cho mỗi lần so sánh hoặc có phương án thay thế tốt hơn không?
Làm cách nào để tránh các cạm bẫy như quên gọi ToUniversalTime() hoặc nhận kết quả sai do DateTimeKind.Unspecified?
Không * chính xác *, trong tài liệu - bạn phải đảm bảo thời gian ở cùng múi giờ. Bên cạnh đó, 'DateTime' không bao gồm bất kỳ thông tin múi giờ nào. Bạn cần 'DateTimeOffset' cho tài liệu –
này nêu rõ điều này * Trước khi so sánh các đối tượng DateTime, hãy đảm bảo rằng các đối tượng đại diện cho thời gian trong cùng một múi giờ. Bạn có thể làm điều này bằng cách so sánh các giá trị thuộc tính Kind của chúng. * –
'NodaTime' để giải cứu :) – tchrikch