2011-05-20 153 views
16

我需要在两个单独的列表中比较日期。每个列表都由MyFile对象构成。这是我创建的一个类,用于获取有关诸如name,dateModified,扩展等文件的特定信息。唯一的问题是我的第二个列表中的很多MyFiles对象(从外部硬盘获得这些对象)不会具有dateTime标记(LastWriteTime)直到毫秒。我相信这就是为什么我的比较不起作用的原因。例如,下面是我的比较失败的一个例子:“为什么c#认为日期不相等?” Debug比较datetime毫秒

a和b是MyFile的对象和文件MyFile类包含一个属性蜱等于他们没有在我刚刚纳入他们用于调试目的的程序使用的file.LastWriteTime.Ticks。所以经过多次调试后,我意识到最后7位数字代表了文件的毫秒数。因此,MyFile中的我的蜱属性现在包含11位有效数字,而不是18位(注意18-11 = 7)。这个问题是,当我比较蜱时,当我尝试更新蜱虫属性除以10000000,然后多重化为10000000时,我得到了奇怪的结果。由于我的蜱虫属性是长整型,所以当我将失去最后7位数划分。我减少了'错误'。但有一些其他时候,当我得到这样的东西: enter image description here

在这里,我们可以看到,日期是相同的,至少到第二。为什么C#认为它不是同一日期?我是否必须创建自己的“Ticks”功能?我知道我日期时间转换为字符串,然后比较,但我希望有知道的posiblility如果对象a.dateModified 比对象b.dateModified

+0

待办事项这两个日期实际上有不同的“毫秒”值? – Oded 2011-05-20 15:50:26

+0

这是一个工作方法: http://stackoverflow.com/questions/1004698/how-to-truncate-milliseconds-off-of-a-net-datetime 通过viggity – Jerry 2013-03-05 19:28:33

回答

31

尝试用特定精度比较:

DateTime a, b; 
// fill a and b with the values you need 
if (Math.Abs((a-b).TotalSeconds) < 1) 
    Console.WriteLine("File doesn't need to be copied"); 
else 
    Console.WriteLine("File needs to be copied"); 
+0

需要截断检查答案。 'TotalSeconds'可以是'0.3' – SLaks 2011-05-20 15:52:24

+0

是的,谢谢。我在发帖后查找了它。另外'TimeSpan'可以是负数,所以我包含'Math.Abs​​()' – Zruty 2011-05-20 15:53:37

+0

编辑你的回答:------> if((ab).TotalSeconds <1),因为TotalSeconds属性返回一个double和I得到结果如0.4512 .....我会接受你的回答 – 2011-05-20 16:00:32