Existe uma maneira melhor .net de verificar se um DateTime ocorreu 'hoje' do que o código abaixo?
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
}
Respostas:
Deve fazer o truque.
fonte
fonte
Experimentar
fonte
Minha solução:
fonte
Se NewsStory também estava usando um DateTime, compare a propriedade Date e pronto.
No entanto, isso depende do que "hoje" realmente significa. Se algo for postado pouco antes da meia-noite, ficará "velho" após um curto período. Portanto, talvez seja melhor manter a data exata da história (incluindo a hora, de preferência UTC) e verificar se menos de 24 horas (ou o que for) se passaram, o que é simples (as datas podem ser subtraídas, o que lhe dá um TimeSpan com TotalHours ou propriedade TotalDays).
fonte
Você pode implementar um método de extensão DateTime.
Crie uma nova classe para seus métodos de extensão:
E agora, em todos os lugares do seu código, onde deseja realizar este teste, você deve incluir o uso de:
E então, use o método de extensão:
fonte
Date
, poisTimeSpan
sempre será 00:00:00.PARA SUA INFORMAÇÃO,
newsStory.Date == DateTime.Today
devolverá o mesmo resultado de comparação da codificação
newsStory == DateTime.Today
onde
newsStory
está umDateTime
objeto.NET é inteligente o suficiente para determinar que você deseja comparar com base apenas na data e usa isso para a comparação interna. Não tenho certeza do motivo e, na verdade, estou tendo problemas para encontrar a documentação para esse comportamento.
fonte
Como Guillame sugeriu em um comentário , compare os valores das
Date
propriedades:fonte
Experimente isto:
fonte
bem, DateTime tem uma propriedade "Date" e você pode apenas comparar com base nela. Mas olhando para a documentação, parece que obter essa propriedade na verdade instancia um novo datetime com o componente time definido como meia-noite, então pode muito bem ser mais lento do que acessar cada componente individual, embora muito mais limpo e legível.
fonte
if (newsStory.ToShortDateString() == DateTime.Today.ToShortDateString()) return "Todtay";
fonte
E se
Mas isso também retornará verdadeiro para 1º de janeiro de 2008 e 1º de janeiro de 2009, que podem ou não ser o que você deseja.
fonte
você poderia usar
DateTime.Now.DayOfYear
fonte