为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
宝慕林4294392 2021-06-01 13:16:20
我正在尝试比较两个具有相同值的 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:002018/5/8 上午 11:17:462010/2/27 下午 1:06:492018/5/8 上午 11:18:08第三个键值与比较值相同。对于所有的关键,我都没有作为输出。谁能解释为什么会这样?
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

DateTime.Equals(静态或实例)将比较Ticks属性。虽然在您看来这两个日期是相同的(由于它的显示方式是为了人类可读),但它们可能相同,也可能不同。滴答是相当高精度的测量(1 滴答 = 100 纳秒)。


如果 中的值KeyValuePair来自某个系统生成的日期时间,它将与您使用静态值创建自己的日期时间对象具有不同的值。


例如,看看这两个日期,


DateTime one = new DateTime(636614784317968133);

DateTime two = new DateTime(636614784317968134);

它们有 100 纳秒的差异。在 add watch 中,它们看起来都一样,但Equals方法将为两者返回 false。

//img1.sycdn.imooc.com//60bad454000140fb05460059.jpg

如果要在毫秒后删除值,可以使用以下代码:

one = one.AddTicks(-one.Ticks % TimeSpan.TicksPerMillisecond);
two = two.AddTicks(-two.Ticks % TimeSpan.TicksPerMillisecond);

完成此操作后,您可以看到Ticks两个日期对象相同,现在可以进行比较。


查看完整回答
反对 回复 2021-06-05
  • 3 回答
  • 0 关注
  • 225 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信