C# 如何检查日期时间是否发生在今天?
有没有更好的.net方法来检查DateTime是否发生在“今天”,然后检查下面的代码C# 如何检查日期时间是否发生在今天?,c#,.net,datetime,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
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
}
试一试
应该做到这一点。根据建议,比较Date
属性的值:
newStory.Date == DateTime.Now.Date
如果NewsStory也使用DateTime,只需比较Date属性,就完成了
然而,这取决于“今天”的实际含义。如果某物在午夜前不久被发布,它将在短时间后成为“旧的”。因此,最好保留确切的报道日期(包括时间,最好是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”属性,您可以根据它进行比较。但从文档来看,获取该属性实际上实例化了一个新的日期时间,时间组件设置为午夜,因此它可能比访问每个单独的组件要慢,尽管更干净、更可读。FYI
newstory.Date==DateTime.Today
将返回与编码相同的比较结果
newstory==DateTime.Today
其中,newstory
是一个DateTime
对象
.NET非常聪明,可以确定您只希望基于日期进行比较,并将其用于内部比较。不确定原因,实际上很难找到有关此行为的文档。我的解决方案:
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;
}
}
}
现在,在您的代码中的任何地方,您希望在哪里执行此测试,您应该包括使用:
using ExtensionMethods;
然后,使用扩展方法:
newsStory.WhenAdded.IsSameDay(DateTime.Now);
if(newstory.ToShortDateString()==DateTime.Today.ToShortDateString())
返回“Todday”代码>您可以比较newStory.Date==DateTime.Now.Date…如果newStory.Date实际上只是日期部分,而没有时间。。。也就是说,如果newsStory是DateTimewell,DateTime是.NET Framework类库的一部分,因此,虽然OP可能创建了自己的类,而该类恰好共享相同的名称,但您可能想知道为什么他会问StackOverflow如何使用他创建的自定义类,并希望我们神奇地知道它是如何工作的@卢塞罗:这是可能的,但是问题的标题是“两个日期时间”。)我想这就是我们从中得到丢失类型的原因。@Hanspeternaumann这是合乎逻辑的:)DateTime.AddHours()返回一个新的DateTime对象,从而有效地取消了确实没有时间组件的.Today操作。我认为这行不通。如果今天是2009年10月21日,而新闻故事是2008年10月21日,那么它将返回真值(我在这里没有考虑闰年)。这不会区分新日期时间(2009年10月1日)。DayOfYear==新日期时间(1900年10月1日)。DayOfYear;我认为经济放缓(如果存在的话)将是如此之小,几乎在所有情况下都无关紧要。当然是早熟优化的例子。同意-这些天我发现摆脱早熟优化越来越困难,因为现代编码世界更注重可读性和可维护性。旧习难改!我想补充一点,这是一个非常常见的错误(而且很难发现错误)-只是将DateTime与DateTime.Today进行比较。为什么不直接返回datetime1.Date==datetime2.Date?@SergiuMindras是对的,比较这两个日期就足够了,因为它的TimeSpan
总是00:00。
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);