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

Pet*_*ger 100 .net c# 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
}
Run Code Online (Sandbox Code Playgroud)

pyr*_*lus 201

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

}
else
{

}
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.

  • 好吧,DateTime是.NET Framework类库的一部分,所以尽管OP可能*创建了他自己的类恰好具有相同的名称,但你不得不想知道为什么他会问StackOverflow如何使用他创建的自定义课程,并期望我们神奇地知道它是如何工作的.;) (18认同)
  • ......如果newsStory是DateTime的话 (14认同)
  • ...如果newsStory.Date实际上只是日期部分,没有时间.;) (3认同)
  • @Lucero occam的剃刀 (2认同)
  • @Lucero这是可能的,但问题标题是'两个DateTimes'.;)我想这就是我们从中获得缺失类型的地方. (2认同)

Dav*_*wns 27

if( newsStory.Date == DateTime.Today )
{
    // happened today
}
Run Code Online (Sandbox Code Playgroud)

  • 我想补充一点,这是一个非常常见的(很难发现bug) - 只是将DateTime与DateTime.Today进行比较. (4认同)

Ste*_*man 14

尝试

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


小智 12

我的解决方案

private bool IsTheSameDay(DateTime date1, DateTime date2)
{
    return (date1.Year == date2.Year && date1.DayOfYear == date2.DayOfYear);
}
Run Code Online (Sandbox Code Playgroud)


Ant*_*lev 7

正如Guillame在评论中建议的那样,比较Date属性的值:

newStory.Date == DateTime.Now.Date
Run Code Online (Sandbox Code Playgroud)


Luc*_*ero 7

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

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


小智 5

仅供参考,

newsStory.Date == DateTime.Today

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

newsStory == DateTime.Today

在哪里newsStory是一个DateTime对象

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


小智 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,在您的代码的任何地方,您希望在哪里执行此测试,您应该包括使用:

using ExtensionMethods;
Run Code Online (Sandbox Code Playgroud)

然后,使用扩展方法:

newsStory.WhenAdded.IsSameDay(DateTime.Now);
Run Code Online (Sandbox Code Playgroud)

  • 为什么不直接返回datetime1.Date == datetime2.Date? (3认同)