我正在尝试比较两个具有相同值的 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。
如果要在毫秒后删除值,可以使用以下代码:
one = one.AddTicks(-one.Ticks % TimeSpan.TicksPerMillisecond); two = two.AddTicks(-two.Ticks % TimeSpan.TicksPerMillisecond);
完成此操作后,您可以看到Ticks
两个日期对象相同,现在可以进行比较。
- 3 回答
- 0 关注
- 225 浏览
添加回答
举报
0/150
提交
取消