比较时间时,DateTimeKind是否被忽略?

时间:2016-01-15 09:16:11

标签: c# .net datetime

var dt1 = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified);
var dt2 = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Local);
var dt3 = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);

成对比较的结果让我感到意外:

Console.WriteLine(dt1 == dt2); // true
Console.WriteLine(dt1 == dt3); // true
Console.WriteLine(dt2 == dt3); // true

1 个答案:

答案 0 :(得分:3)

是的,当您比较DateTime值时会忽略Kind property

来自referance source of == operator in DateTime structure

public static bool operator ==(DateTime d1, DateTime d2)
{
    return d1.InternalTicks == d2.InternalTicks;
}

同样来自DateTime.Compare documentation 1

  

要确定t1t2的关系,请使用Compare方法进行比较   t1和t2的Ticks property 但忽略了他们的Kind属性。   在比较DateTime对象之前,确保对象表示   在同一时区的时间

1:内部使用==运算符