Как проверить, происходит ли DateTime сегодня? - PullRequest
90 голосов
/ 21 октября 2009

Есть ли лучший способ .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
}

Ответы [ 13 ]

187 голосов
/ 21 октября 2009
if (newsStory.WhenAdded.Date == DateTime.Today)
{

}
else
{

}

Должен сделать свое дело.

27 голосов
/ 21 октября 2009
if( newsStory.Date == DateTime.Today )
{
    // happened today
}
14 голосов
/ 21 октября 2009

Попробуйте

if (newsStory.Date == DateTime.Now.Date) 
{ /* Story happened today */ }
else
{ /* Story didn't happen today */ }
11 голосов
/ 20 декабря 2011

Мое решение:

private bool IsTheSameDay(DateTime date1, DateTime date2)
{
    return (date1.Year == date2.Year && date1.DayOfYear == date2.DayOfYear);
}
7 голосов
/ 21 октября 2009

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

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

5 голосов
/ 06 ноября 2012

Вы можете реализовать метод расширения 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);
5 голосов
/ 23 октября 2009

FYI,

newsStory.Date == DateTime.Today

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

newsStory == DateTime.Today

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

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

3 голосов
/ 21 октября 2009

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

newStory.Date == DateTime.Now.Date
2 голосов
/ 21 октября 2009

Попробуйте это:

newsStory.Date == DateTime.Today
1 голос
/ 21 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...