2010-12-13 43 views
1

我需要通過消除秒,而比較基於日期時間高達分鐘比較兩個文件...比較基於datetime的兩個文件直到分鐘?

public class FileCompareLastwritetime : System.Collections.Generic.IEqualityComparer<System.IO.FileInfo> 
     { 
      public FileCompareLastwritetime() { } 
      public bool Equals(System.IO.FileInfo f1, System.IO.FileInfo f2) 
      { 
       return f1.LastWriteTime == f2.LastWriteTime; 
      } 
      public int GetHashCode(System.IO.FileInfo fi) 
      { 
       string s = String.Format("{0}", fi.LastWriteTime); 
       return s.GetHashCode(); 
      } 
     } 
+0

@Marc Gravell:我在這裏比較lastwritetime的兩個文件...它會比較upto秒..我需要比較upto分鐘.. – bala3569 2010-12-13 11:25:37

回答

4

如何:

public class FileCompareLastwritetime 
     : System.Collections.Generic.IEqualityComparer<System.IO.FileInfo> { 
    public FileCompareLastwritetime() { } 
    public bool Equals(System.IO.FileInfo f1, System.IO.FileInfo f2) { 
     return ToMinute(f1.LastWriteTime) == ToMinute(f2.LastWriteTime); 
    } 
    public int GetHashCode(System.IO.FileInfo fi) { 
     return ToMinute(fi.LastWriteTime).GetHashCode(); 
    } 
    static DateTime ToMinute(DateTime value) { 
     return new DateTime(value.Year, value.Month, value.Day, 
       value.Hour, value.Minute, 0, value.Kind); 
    } 
} 
+0

使用jon的球隊的答案,但它不適合我... http://stackoverflow.com/questions/1256460/determine-equality datetime-values-with-minute-precision-within-linq – bala3569 2010-12-13 11:33:01

+0

@ bala3569定義「不工作」......它做它聲稱的東西;輪到(下)到分鐘。 – 2010-12-13 11:34:33

1
Math.Abs(time1.Subtract(time2).TotalMinutes) < 1 
+0

這樣一個'Equals'實現將會失敗所需的傳遞性 - 即a.Equals(b)和b.Equals(c)=> a.Equals(c)'。 – Ani 2010-12-13 11:38:59

+0

@Ani,這不是數學上的等同實現,你應該認爲這是半模糊的,我認爲在這種情況下,真正的方法是這樣的,因爲比較創建時間和精確分鐘是不合適的:a:10:50:00和b:10:49:50分鐘比較返回false,但對於c:10:50:00和10:50:50,確切的分鐘返回true,而IMO不是一個合適的答案。我認爲你找不到任何好的答案。 – 2010-12-13 12:25:38

+0

這是列出的準則。 「如果(x.Equals(y)&& y.Equals(z))返回true,則x.Equals(z)返回true。」 http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx – Ani 2010-12-13 12:44:33