How to check if a DateTime occurs today?

Is there a better .net way to check if a DateTime has occured 'today' then the code below?

if ( newsStory.WhenAdded.Day == DateTime.Now.Day &&
newsStory.WhenAdded.Month == DateTime.Now.Month &&
newsStory.WhenAdded.Year == DateTime.Now.Year )
{
// Story happened today
}
else
{
// Story didn't happen today
}
89641 次浏览

试试看

if (newsStory.Date == DateTime.Now.Date)
{ /* Story happened today */ }
else
{ /* Story didn't happen today */ }
if( newsStory.Date == DateTime.Today )
{
// happened today
}
if (newsStory.WhenAdded.Date == DateTime.Today)
{


}
else
{


}

应该能行。

正如 纪尧姆建议的 发表评论,比较 Date属性的值:

newStory.Date == DateTime.Now.Date

If NewsStory was using a DateTime also, just compare the Date property, and you're done.

然而,这取决于“今天”实际上是什么意思。如果某些东西在午夜前不久被发布,那么在很短的时间内它就会变得“老”。所以也许最好是保持准确的故事日期(包括时间,最好是 UTC) ,并检查是否少于24小时(或其他)已经过去,这是很简单的(日期可以减去,这给你一个时间跨度与 TotalHours 或 TotalDays 属性)。

你可以用 DateTime.Now.DayOfYear

 if (newsStory.DayOfYear == DateTime.Now.DayOfYear)
{ // story happened today


}
else
{ // story didn't happen today


}

试试这个:

newsStory.Date == DateTime.Today

怎么样

if (newsStory.DayOfYear == DateTime.Now.DayOfYear)
{ // Story happened today
}

但是在2008年1月1日和2009年1月1日,这也将返回真值,这可能是你想要的,也可能不是。

DateTime 有一个“ Date”属性,你可以根据它进行比较。但是看看这些文档,似乎获取这个属性实际上实例化了一个新的日期时间,时间组件设置为午夜,所以它可能比访问每个单独的组件慢得多,尽管更清晰、更易读。

仅供参考,

newsStory.Date == DateTime.Today

将返回与编码相同的比较结果

newsStory == DateTime.Today

其中 newsStoryDateTime对象

.NET 足够聪明,可以确定您希望仅基于 Date 进行比较,并将其用于内部 Compare。不知道为什么,实际上很难找到这种行为的文档。

我的解决办法是:

private bool IsTheSameDay(DateTime date1, DateTime date2)
{
return (date1.Year == date2.Year && date1.DayOfYear == date2.DayOfYear);
}

可以实现 DateTime 扩展方法。

为扩展方法创建新类:

namespace ExtensionMethods
{
public static class ExtensionMethods
{
public static bool IsSameDay( this DateTime datetime1, DateTime datetime2 )
{
return datetime1.Year == datetime2.Year
&& datetime1.Month == datetime2.Month
&& datetime1.Day == datetime2.Day;
}
}
}

现在,在代码的任何地方,您想在哪里执行这个测试,您应该包含 use:

using ExtensionMethods;

然后,使用扩展方法:

newsStory.WhenAdded.IsSameDay(DateTime.Now);