我试图理解为什么以下功能不起作用。
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)
确实包含指定的开始日期。
例如,如果我将开始日期设置为2013年1月4日,结束日期设置为2013年1月1日,则函数将返回具有以下日期的文件:
2013年1月4日, 2013年1月5日, 2013年1月6日, 2013年1月7日
尽管在代码中使用了&lt; =,但它不包括1/8/2013。
答案 0 :(得分:9)
你正在处理日期&amp;时间值,而不仅仅是日期值。
1/6/2013 4:30
不等于1/6/2013 12:00
,尽管日期相同。
您可以在每个Date
对象上使用DateTime
属性来获取时间始终为午夜的新DateTime
个对象。
答案 1 :(得分: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
是真的。
答案 2 :(得分:0)
但是当与日期时间比较时,不包括最后一秒的值:时间&lt; = 1/14/2013 1:26:42 am,它包括2013年1月14日1:26:41 AM?