不包括最近日期的DateTime比较



我试图理解为什么下面的函数不起作用。

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)省略了指定的结束日期?

第一个比较(f.LastWriteTime > start)不包含指定的开始日期。

例如,如果我设置开始日期为1/4/2013,结束日期为1/8/2013,函数返回具有以下日期的文件:

1/4/2013,1/5/2013,1/6/2013,1/7/2013

将不包括1/8/2013,尽管在代码中使用了<=。

您正在处理日期&时间值,而不仅仅是日期值。

1/6/2013 4:30不等于1/6/2013 12:00,尽管日期相同。

您可以在每个DateTime对象上使用Date属性来获得时间始终为午夜的新DateTime对象。

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

是错误的。由于时间组件,第一个日期实际上包含在result:

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

是真的。

但是当与日期线时间比较时,value的最后一秒不包括:time <= 1/14/2013 1:26:42 am,它包括1/14/2013 1:26:41 am ?

相关内容

  • 没有找到相关文章

最新更新