在比较时间时是否简单地忽略了日期时间种类

本文关键字:时间 日期 种类 简单 比较 是否 | 更新日期: 2023-09-27 18:30:40

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

在比较时间时是否简单地忽略了日期时间种类

是的

,当您比较DateTime值时Kind属性将被忽略。

DateTime结构中==运算符的参考源:

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

同样来自DateTime.Compare文档1

为了确定t1t2的关系,比较方法比较 t1 和 t2 的Ticks属性,但忽略它们的 Kind 属性。 在比较 DateTime 对象之前,请确保对象表示 同一时区的时间

1:内部使用==运算符