2011-05-20 151 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