2010-12-13 13 views
1
私が比較しながら秒を排除することによって、微細な点で最大日時に基づいて2つのファイルを比較する必要が

...分のdatetimeに基づいて2つのファイルを比較する?

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を比較しています2つのファイル...それは秒まで比較します..私は分まで比較する必要があります.. – bala3569

答えて

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

ジョンソンの骨組みの答えが使用されているが、それは私のために働いていない... http://stackoverflow.com/questions/1256460/determine-equality -of-datetime-values-with-minute-within-linq – bala3569

+0

@ bala3569は "働かない"と定義します...それはそれが主張することを行います。分に丸めます。 –

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

このような 'Equals'の実装は、必要な' 'a.Equals(b)とb.Equals(c)=> a.Equals(c)のプロパティに失敗します。 – Ani

+0

@Ani、それは数学的に等価な実装ではないので、これについては半曖昧だと思うべきです。この場合、正確な分単位の作成時間を比較するのは適切ではありません:a:10:50:00 b:10:49:50分の比較はfalseを返すが、c:10:50:00と10:50:50の正確な分はtrueを返し、IMOは適切な答えではない。あなたは良い0-1の平等な答えを見つけることができないと思います。 –

+0

記載されているガイドラインです。 "(x.Equals(y)&&.Equals(z))がtrueを返した場合、x.Equals(z)はtrueを返します。 http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx – Ani

関連する問題