猿问

c# DateTime.Equals() 不能正常工作

我正在尝试比较两个具有相同值的 DateTime 变量。


但是当我使用 Equals 方法时,它返回 false 表示“不等于”。


我的代码是:


DateTime date = DateTime.Parse("2/27/2010 1:06:49 PM");

foreach (KeyValuePair<DateTime, List<string>> k in Sample)

{

   if (date.Equals(k.Key))

   {

      Console.WriteLine("Yes");

   }

   else {

      Console.WriteLine("No");

   }

}

字典 Sample 包含以下键:

  • 2018/5/8 上午 11:18:00

  • 2018/5/8 上午 11:17:46

  • 2010/2/27 下午 1:06:49

  • 2018/5/8 上午 11:18:08

第三个键值与比较值相同。

对于所有的关键,我都没有作为输出。

谁能解释为什么会这样?


宝慕林4294392
浏览 226回答 3
3回答

RISEBY

DateTime.Equals(静态或实例)将比较Ticks属性。虽然在您看来这两个日期是相同的(由于它的显示方式是为了人类可读),但它们可能相同,也可能不同。滴答是相当高精度的测量(1 滴答 = 100 纳秒)。如果 中的值KeyValuePair来自某个系统生成的日期时间,它将与您使用静态值创建自己的日期时间对象具有不同的值。例如,看看这两个日期,DateTime one = new DateTime(636614784317968133);DateTime two = new DateTime(636614784317968134);它们有 100 纳秒的差异。在 add watch 中,它们看起来都一样,但Equals方法将为两者返回 false。如果要在毫秒后删除值,可以使用以下代码:one&nbsp;=&nbsp;one.AddTicks(-one.Ticks&nbsp;%&nbsp;TimeSpan.TicksPerMillisecond); two&nbsp;=&nbsp;two.AddTicks(-two.Ticks&nbsp;%&nbsp;TimeSpan.TicksPerMillisecond);完成此操作后,您可以看到Ticks两个日期对象相同,现在可以进行比较。
随时随地看视频慕课网APP
我要回答