2010-03-12 45 views

回答

38

这是一个可能的解决方案:

yourDateTime.Date.AddHours(23).AddMinutes(59).AddSeconds(59); 
+0

这工作。谢谢! –

+23

只是希望23:59:59.500的时间没有任何问题。 –

+0

这是在上午7:00到下午4:00之间输入的数据。唯一可能成为问题的事情不会传递给我正在使用的这个数据库。我相信我会好起来的。另一个寻找类似解决方案的人应该担心。 –

1

只使用比上部比较晚一天,而上部<而不是<=。这样,你可以得到比你指定的更晚的时间(几分之一秒)。

或者,使用DateTime.Date属性而不是直接比较DateTime。这将“剥离”时间部分,因此您在搜索中的日期将自动被视为午夜。

35

为什么没有对天高比较是午夜后最后一个你感兴趣的,然后使用带有专用的比较?

DateTime upperExclusive = lastInclusive.Date.AddDays(1); 
if (dateInclusive >= date && date < upperExclusive) 
{ 
    .... 
} 

这感觉比找一天的最后一秒一个清洁的解决方案 - 除了别的,你仍然失踪的23值:59:59.500等你当前方案。

强制性插件:我不是BCL日期/时间API的粉丝。您可能希望保持Noda Time的标签 - 端口号为Joda Time

+2

你也可以做lastInclusive.Date.AddDays(1).AddTicks(-1)这会给你23:59:59.999999 :) –

+0

@AdamMarshall:你可以,是的。但排他性的上限通常较为整齐。 –

4

如果你做一个比较,你为什么不比较第二天的开始呢?

例如,如果它是一个LINQ查询:

someList.Where(x => (currentDaysDate <= x.ItemDate) && (x.ItemDate < nextDaysDate)) 
0

如果你不担心时间可言,你可以使用Date物业DateTime,这只是返回的日期部分(带有设置为00:00时: 0000)

if(MyDate.Date >= StartDate.Date && MyDate.Date <= EndDate.Date) 
{ 
    //Code here 
} 
3

创建EndOfDay扩展方法

public static DateTime EndOfDay (this DateTime d) 
    { 
     return DateTime.Parse(d.ToShortDateString().Trim() + " 23:59:59"); 
    } 
+4

DateTime.Parse()和ToShortDateString()的行为取决于当前系统区域设置。您的代码在某些非英文语言环境中会失败。 – Daniel