Ответ 1
if (newsStory.WhenAdded.Date == DateTime.Today)
{
}
else
{
}
Должен сделать трюк.
Есть ли лучший способ .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
}
if (newsStory.WhenAdded.Date == DateTime.Today)
{
}
else
{
}
Должен сделать трюк.
if( newsStory.Date == DateTime.Today )
{
// happened today
}
Try
if (newsStory.Date == DateTime.Now.Date)
{ /* Story happened today */ }
else
{ /* Story didn't happen today */ }
Мое решение:
private bool IsTheSameDay(DateTime date1, DateTime date2)
{
return (date1.Year == date2.Year && date1.DayOfYear == date2.DayOfYear);
}
Если NewsStory также использует DateTime, просто сравните свойство Date, и все готово.
Однако это зависит от того, что на самом деле означает "сегодня". Если что-то будет опубликовано незадолго до полуночи, оно будет "старым" через короткое время. Поэтому, возможно, было бы лучше сохранить точную дату истории (включая время, желательно UTC) и проверить, прошло ли менее 24 часов (или что-то еще), что просто (даты могут быть вычтены, что дает вам TimeSpan с TotalHours или свойство TotalDays).
Вы можете реализовать метод расширения 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);
FYI,
newsStory.Date == DateTime.Today
вернет тот же результат сравнения, что и кодирование
newsStory == DateTime.Today
где newsStory
- объект DateTime
.NET достаточно умен, чтобы определить, что вы хотите сравнивать на основе только даты, и использует это для внутреннего сравнения. Не знаете, почему и на самом деле возникают проблемы с поиском документации для этого поведения.
Как Guillame предложил в комментарии, сравните значения свойств Date
:
newStory.Date == DateTime.Now.Date
Попробуйте следующее:
newsStory.Date == DateTime.Today
Хорошо, DateTime имеет свойство "Дата", и вы можете просто сравнить на основе этого. Но, глядя на документы, кажется, что получение этого свойства на самом деле создает новое datetime с компонентом времени, установленным до полуночи, поэтому он может быть очень медленным, чем доступ к каждому отдельному компоненту, хотя он намного чище и читабельнее.
Как насчет
if (newsStory.DayOfYear == DateTime.Now.DayOfYear)
{ // Story happened today
}
Но это также вернется к 1 января 2008 года и 1 января 2009 года, что может быть или не быть тем, что вы хотите.
вы можете использовать DateTime.Now.DayOfYear
if (newsStory.DayOfYear == DateTime.Now.DayOfYear)
{ // story happened today
}
else
{ // story didn't happen today
}