2010-12-14 5 views
1

私は、これらのクエリのための分の結果件まで丸めずに2つのファイルを比較した場合分のdatetimeに基づいて2つのファイルを比較することに問題がありますか?

var queryList1Only3 = (from file in list1 select file).Except(list2, myFileCompare2); 
var queryList1Only33 = (from file in list2 select file).Except(list1, myFileCompare2); 

12/14/2010 4:14:10 PM  C:\xml\Tracker.xml 
10/13/2010 3:00:27 PM  D:\xml\Tracker.xml 

ですが、私は分件まで日時を丸める場合queryList1Only3の結果が

12/14/2010 4:14:10 PM  C:\xml\Tracker.xml 

です2番目のクエリは、C:\xml\Tracker.xmlというファイルのみを変更したため空ではなく何も返しません。もう1つのファイルは変更されていませんES ...

public class FileCompareLastwritetime : System.Collections.Generic.IEqualityComparer<System.IO.FileInfo> 
     { 
      public FileCompareLastwritetime() { } 
      public bool Equals(System.IO.FileInfo f1, System.IO.FileInfo f2) 
      { 
       return RoundToMinute(f1.LastWriteTime) == RoundToMinute(f2.LastWriteTime); 
      } 
      public int GetHashCode(System.IO.FileInfo fi) 
      { 
       return RoundToMinute(fi.LastWriteTime).GetHashCode(); 
      } 
     } 


public static DateTime RoundToMinute(DateTime time) 
      { 
       return new DateTime(time.Year, time.Month, time.Day, 
            time.Hour, time.Minute, 0, time.Kind); 
      } 

任意の提案?

EDIT:日時に等しい

IEnumerable<System.IO.FileInfo> list1 = dir1.GetFiles("*.*", System.IO.SearchOption.AllDirectories); 
    IEnumerable<System.IO.FileInfo> list2 = dir2.GetFiles("*.*", System.IO.SearchOption.AllDirectories); 
+0

このリンクを参照してください...あなたはさまざまなオプションを得ることができます... http://stackoverflow.com/questions/2956748/datetime-comparison-precision/2956818 –

+0

@The King:私の問題を教えてくださいコード?? – bala3569

+0

詳細を追加できますか?リストfile1とfile2はどこから来たのですか?その結果の最初のセットは両方のクエリの結果か、ただ1つの結果だけですか?もしそうなら、どちらですか? – Rikalous

答えて

1

ティックを比較するなど、私が発見した最良のDateTimeトランケーション方法time.Year、time.Monthを使用して値を設定する際に、わずかに異なっていてもよい以下の通りである:

///<summary> 
/// Extension methods for DateTime class 
///</summary> 
public static class DateTimeExt 
{ 
    /// <summary> 
    /// <para>Truncates a DateTime to a specified resolution.</para> 
    /// <para>A convenient source for resolution is TimeSpan.TicksPerXXXX constants.</para> 
    /// </summary> 
    /// <param name="date">The DateTime object to truncate</param> 
    /// <param name="resolution">e.g. to round to nearest second, TimeSpan.TicksPerSecond</param> 
    /// <returns>Truncated DateTime</returns> 
    public static System.DateTime Truncate(this System.DateTime date, long resolution) 
    { 
     return new System.DateTime(date.Ticks - (date.Ticks % resolution), date.Kind); 
    } 
} 

使用法:分に切り捨てるmyDateTime.Truncate(TimeSpan.TicksPerMinute)。ラウンドはしませんが、どちらもあなたの例はありません。

関連する問題