DateTime比较不包括最近的日期

时间:2013-01-10 20:49:45

标签: c# datetime comparison

我试图理解为什么以下功能不起作用。

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。

3 个答案:

答案 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?