4

次の関数が機能しない理由を理解しようとしています。

public IEnumerable<LogFile> GetLogs(string directory, DateTime start, DateTime end)
{
    DirectoryInfo di = new DirectoryInfo(directory);
    return di.GetFiles("*debug.log").Where(f => f.LastWriteTime > start && f.LastWriteTime <= end).Select(f => new LogFile(f.FullName));
}

(f.LastWriteTime <= end)2 番目の比較で指定された終了日が省略されるのはなぜですか?

最初の比較(f.LastWriteTime > start)には、指定された開始日が含まれます。

たとえば、開始日を 2013 年 1 月 4 日、終了日を 2013 年 1 月 8 日に設定すると、関数は次の日付のファイルを返します。

2013 年 1 月 4 日、2013 年 1 月 5 日、2013 年 1 月 6 日、2013 年 1 月 7 日

コードで <= を使用しているにもかかわらず、2013 年 1 月 8 日は含まれません。

4

3 に答える 3

9

日付値だけでなく、日付と時刻の値を扱っています。

1/6/2013 4:301/6/2013 12:00日付が同じであるにもかかわらず、は と等しくありません。

Date各オブジェクトのプロパティを使用して、時刻が常に真夜中のDateTime新しいオブジェクトを取得できます。DateTime

于 2013-01-10T20:51:43.080 に答える
4

DateTime には、(その名前が示すように) 時間コンポーネントも含まれています。したがって、実際の比較は次のとおりです。

f.LastWriteTime > start && f.LastWriteTime <= end

f.LastWriteTime > 1/4/2013 00:00:00 && f.LastWriteTime <= 1/8/2013 00:00:00

最後のファイルの日付は、おそらく 1/8/2013 13:45:12 のようなものです。

1/8/2013 13:45:12 <= 1/8/2013 00:00:00

は偽です。時間コンポーネントのため、実際には最初の日付が結果に含まれます。

1/4/2013 00:00:00 > 1/4/2013 13:45:12

本当です。

于 2013-01-10T20:56:03.130 に答える
0

しかし、date plue 時間と比較すると、値の最後の 1 秒は含まれません:

于 2013-01-28T15:56:39.490 に答える