DateTime比较不包括最近的日期

dbp*_*man 4 c# comparison 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));
}
Run Code Online (Sandbox Code Playgroud)

为什么第二次比较(f.LastWriteTime <= end)省略了指定的结束日期?

第一次比较(f.LastWriteTime > start)确实包括指定的开始日期.

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

2013年1月4日,1/5/2013,1/6/2013,1/7/2013

尽管在代码中使用了<=,但它不包括1/8/2013.

Ser*_*rvy 9

您正在处理日期和时间值,而不仅仅是日期值.

1/6/2013 4:301/6/2013 12:00尽管日期是相同的,但并不等于.

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

  • @Kevin即使在那时,时间的精确度也小于一秒,所以为了避免这些问题,要比第二天的午夜更容易说.但就可读性而言,如果您只关心日期,我会花时间在所有相关日期调用`.Date`; 这对读者来说更清楚了. (2认同)