如何检查DateTime今天是否发生?

时间:2009-10-21 15:25:16

标签: c# .net datetime

是否有更好的.net方法来检查DateTime是否已经'今天'发生,然后是下面的代码?

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
}

13 个答案:

答案 0 :(得分:186)

if (newsStory.WhenAdded.Date == DateTime.Today)
{

}
else
{

}

应该做的伎俩。

答案 1 :(得分:27)

if( newsStory.Date == DateTime.Today )
{
    // happened today
}

答案 2 :(得分:14)

尝试

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

答案 3 :(得分:11)

我的解决方案:

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

答案 4 :(得分:7)

如果NewsStory也使用了DateTime,只需比较Date属性,就完成了。

然而,这取决于“今天”实际意味着什么。如果在午夜前不久发布了某些内容,则会在短时间后显示“旧”。所以也许最好保持确切的故事日期(包括时间,最好是UTC)并检查是否已经过了不到24小时(或其他),这很简单(可以减去日期,这会给你一个带有TotalHours的TimeSpan或TotalDays属性。)

答案 5 :(得分:5)

FYI,

newsStory.Date == DateTime.Today

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

newsStory == DateTime.Today

其中newsStoryDateTime对象

.NET足够智能,可以确定您只想基于日期进行比较,并将其用于内部比较。不确定原因,并且实际上无法找到此行为的文档。

答案 6 :(得分:5)

您可以实现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;
        }
    }
}

现在,在您的代码的每个地方,您想要执行此测试的位置,您应该包括使用:

using ExtensionMethods;

然后,使用扩展方法:

newsStory.WhenAdded.IsSameDay(DateTime.Now);

答案 7 :(得分:3)

根据Guillame建议in a comment,比较Date属性的值:

newStory.Date == DateTime.Now.Date

答案 8 :(得分:2)

试试这个:

newsStory.Date == DateTime.Today

答案 9 :(得分:1)

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

答案 10 :(得分:0)

{{1}}

答案 11 :(得分:-3)

怎么样

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

但是,这也将在2008年1月1日和2009年1月1日恢复,这可能是您想要的也可能不是。

答案 12 :(得分:-5)

您可以使用DateTime.Now.DayOfYear

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

 }
 else
 { // story didn't happen today

 }