如何检查是否今天发生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 }