如何检查是否今天发生date时间?

有没有更好的.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 } 
 if (newsStory.WhenAdded.Date == DateTime.Today) { } else { } 

应该做的伎俩。

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

尝试

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

我的解决scheme

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

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

但是,这取决于“今天”的实际含义。 如果在午夜之前发布了一些东西,那么在短时间之后它会“老”。 所以也许最好保留确切的故事date(包括时间,最好是UTC),并检查是否已经过了不到24小时(或其他),这很简单(可以减去date,这会给你一个TimeSpan带一个TotalHours或TotalDays属性)。

您可以实现DateTime扩展方法。

为您的扩展方法创build新的类:

 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; } } } 

现在,在你的代码的任何地方,你想在哪里执行这个testing,你应该包括使用:

 using ExtensionMethods; 

然后,使用扩展方法:

 newsStory.WhenAdded.IsSameDay(DateTime.Now); 

仅供参考,

newsStory.Date == DateTime.Today

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

newsStory == DateTime.Today

newsStory是一个DateTime对象

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

尝试这个:

 newsStory.Date == DateTime.Today 

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

 newStory.Date == DateTime.Now.Date 

那么,DateTime有一个“date”属性,你可以根据这个来比较。 但看看文档看来,获取该属性实际上实例化一个新的date时间的时间组件设置为午夜,所以它可能会比访问每个单独的组件更慢,虽然更清洁,更可读。

怎么样

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

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

你可以使用DateTime.Now.DayOfYear

  if (newsStory.DayOfYear == DateTime.Now.DayOfYear) { // story happened today } else { // story didn't happen today }