Czy istnieje lepszy sposób .net na sprawdzenie, czy DateTime wystąpił „dzisiaj” niż poniższy kod?
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
}
Odpowiedzi:
Powinien załatwić sprawę.
źródło
źródło
Próbować
źródło
Moje rozwiązanie:
źródło
Jeśli NewsStory również używał DateTime, po prostu porównaj właściwość Date i gotowe.
Zależy to jednak od tego, co właściwie oznacza „dzisiaj”. Jeśli coś zostanie opublikowane krótko przed północą, po krótkim czasie stanie się „stare”. Więc może najlepiej byłoby zachować dokładną datę historii (w tym godzinę, najlepiej UTC) i sprawdzić, czy minęło mniej niż 24 godziny (lub cokolwiek innego), co jest proste (daty można odjąć, co daje TimeSpan z TotalHours lub TotalDays).
źródło
Można zaimplementować metodę rozszerzenia DateTime.
Utwórz nową klasę dla metod rozszerzających:
A teraz wszędzie w kodzie, gdzie chcesz wykonać ten test, powinieneś dołączyć using:
Następnie użyj metody rozszerzenia:
źródło
Date
, ponieważTimeSpan
zawsze będzie to 00:00:00.FYI,
newsStory.Date == DateTime.Today
zwróci ten sam wynik porównania co kodowanie
newsStory == DateTime.Today
gdzie
newsStory
jestDateTime
przedmiotPlatforma .NET jest wystarczająco inteligentna, aby określić, czy chcesz porównać, tylko na podstawie daty i używa jej do wewnętrznego porównania. Nie wiem dlaczego i mam problem ze znalezieniem dokumentacji opisującej to zachowanie.
źródło
Jak zasugerował Guillame w komentarzu , porównaj wartości
Date
właściwości:źródło
Spróbuj tego:
źródło
cóż, DateTime ma właściwość „Date” i na tej podstawie możesz po prostu porównać. Ale patrząc na dokumenty, wydaje się, że pobranie tej właściwości w rzeczywistości tworzy instancję nowej daty i godziny z komponentem czasu ustawionym na północ, więc może to być znacznie wolniejsze niż dostęp do każdego pojedynczego komponentu, chociaż znacznie czystsze i bardziej czytelne.
źródło
if (newsStory.ToShortDateString() == DateTime.Today.ToShortDateString()) return "Todtay";
źródło
Co powiesz na
Ale to również powróci dla 1 stycznia 2008 i 1 stycznia 2009, co może być tym, czego chcesz, ale nie musi.
źródło
mógłbyś użyć
DateTime.Now.DayOfYear
źródło