2010-12-13 5 views
1

je dois comparer deux fichiers en fonction de datetime jusqu'à minute en éliminant secondes tout en comparant ...comparer deux fichiers basés sur datetime jusqu'à minutes?

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: ici je compare LastWriteTime de deux fichiers ... il faudra comparer jusqu'à secondes ... je dois comparer jusqu'à la minute .. – bala3569

Répondre

4

Que diriez-vous:

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

utilisé jon skeets réponse, mais il ne fonctionne pas pour moi ... http: //stackoverflow.com/questions/1256460/determine-equality -of-datetime-values-with-minute-precision-within-linq – bala3569

+0

@ bala3569 définir "ne fonctionne pas" ... il fait ce qu'il prétend; arrondit (vers le bas) à la minute. –

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

Une telle implémentation 'Equals' échouera à la propriété de transitivité requise - que' a.Equals (b) et b.Equals (c) => a.Equals (c) '. – Ani

+0

@Ani, Ce n'est pas une mise en œuvre mathématique égale, vous devriez penser à demi flou à ce sujet, et je pense que dans ce cas la vraie façon est la suivante, car comparer temps de création par minutes exactes ne convient pas: a: 10: 50: 00 b: 10: 49: 50 la comparaison des minutes renvoie false, mais pour c: 10: 50: 00 et 10:50:50 par la minute exacte renvoie vrai, et OMI ce n'est pas une réponse appropriée. et je pense que vous ne trouvez pas de bonne réponse égale à 0-1. –

+0

C'est une directive listée. "Si (x.Equals (y) && y.Equals (z)) renvoie true, alors x.Equals (z) renvoie true." http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx – Ani

Questions connexes