2010-12-13 9 views
1

Ich brauche zwei Dateien bis zu Minute basierend auf Datumzeit vergleichen Sekunden eliminiert, während Vergleich ...Vergleichen Sie zwei Dateien basierend auf Datetime bis zu Minute?

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 GRA: hier bin im Vergleich i Lastwritetime von zwei Dateien ... es wird bis Sekunden vergleichen .. ich muss bis Minute vergleichen .. – bala3569

Antwort

4

Wie wäre:

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

verwendet Jon Skeets beantworten, aber es funktioniert nicht für mich ... http: //stackoverflow.com/questions/1256460/determine-equality -of-datetime-Werte-mit-Minute-Genauigkeit-in-Line – bala3569

+0

@ bala3569 define "nicht funktioniert" ... es tut, was es behauptet; Runden (down) auf die Minute. –

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

Eine solche "Equals" -Implementierung wird die geforderte Transitivitätseigenschaft nicht erfüllen - nämlich "a.Equals (b) und b.Equals (c) => a.Equals (c)". – Ani

+0

@Ani, Es ist nicht mathematisch gleichwertige Umsetzung, sollten Sie denken, halb unscharfe darüber, und ich denke, in diesem Fall ist der wahre Weg das, denn zB Vergleich Erstellungszeit durch genaue Minuten ist nicht geeignet: a: 10: 50: 00 und b: 10: 49: 50 der Minuten-Vergleich gibt false zurück, aber für c: 10: 50: 00 und 10:50:50 entspricht die exakte Minuten-Rückgabe true, und IMO ist keine passende Antwort. und ich denke, Sie können keine gute 0-1 gleiche Antwort finden. –

+0

Es ist eine gelistete Richtlinie. "Wenn (x.Equals (y) && y.Equals (z)) wahr zurückgibt, gibt x.Equals (z) true zurück." http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx – Ani