Как проверить, существует ли DateTime сегодня?

Есть ли лучший способ .net, чтобы проверить, произошло ли событие DateTime '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
}

Ответ 1

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

}
else
{

}

Должен сделать трюк.

Ответ 2

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

Ответ 3

Try

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

Ответ 4

Мое решение:

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

Ответ 5

Если NewsStory также использует DateTime, просто сравните свойство Date, и все готово.

Однако это зависит от того, что на самом деле означает "сегодня". Если что-то будет опубликовано незадолго до полуночи, оно будет "старым" через короткое время. Поэтому, возможно, было бы лучше сохранить точную дату истории (включая время, желательно UTC) и проверить, прошло ли менее 24 часов (или что-то еще), что просто (даты могут быть вычтены, что дает вам TimeSpan с TotalHours или свойство TotalDays).

Ответ 6

Вы можете реализовать метод расширения 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

FYI,

newsStory.Date == DateTime.Today

вернет тот же результат сравнения, что и кодирование

newsStory == DateTime.Today

где newsStory - объект DateTime

.NET достаточно умен, чтобы определить, что вы хотите сравнивать на основе только даты, и использует это для внутреннего сравнения. Не знаете, почему и на самом деле возникают проблемы с поиском документации для этого поведения.

Ответ 8

Как Guillame предложил в комментарии, сравните значения свойств Date:

newStory.Date == DateTime.Now.Date

Ответ 9

Попробуйте следующее:

newsStory.Date == DateTime.Today

Ответ 10

Хорошо, DateTime имеет свойство "Дата", и вы можете просто сравнить на основе этого. Но, глядя на документы, кажется, что получение этого свойства на самом деле создает новое datetime с компонентом времени, установленным до полуночи, поэтому он может быть очень медленным, чем доступ к каждому отдельному компоненту, хотя он намного чище и читабельнее.

Ответ 11

Как насчет

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

Но это также вернется к 1 января 2008 года и 1 января 2009 года, что может быть или не быть тем, что вы хотите.

Ответ 12

вы можете использовать DateTime.Now.DayOfYear

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

 }
 else
 { // story didn't happen today

 }