web-dev-qa-db-fra.com

Comment vérifier si un DateTime se produit aujourd'hui?

Existe-t-il un meilleur moyen .net de vérifier si un DateTime a eu lieu «aujourd'hui», puis le code ci-dessous?

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
}
87
Peter Bridger
if (newsStory.WhenAdded.Date == DateTime.Today)
{

}
else
{

}

Devrait faire l'affaire.

183
pyrocumulus
if( newsStory.Date == DateTime.Today )
{
    // happened today
}
26
Dave Downs

Essayer

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

Ma solution:

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

Si NewsStory utilisait également un DateTime, il suffit de comparer la propriété Date et vous avez terminé.

Cependant, cela dépend de ce que "aujourd'hui" signifie réellement. Si quelque chose est posté peu avant minuit, il sera "vieux" après un court instant. Il serait peut-être préférable de conserver la date exacte de l’histoire (y compris l’heure, de préférence UTC) et de vérifier si moins de 24 heures (ou peu importe) se sont écoulées, ce qui est simple (les dates peuvent être soustraites, ce qui vous donne un TimeSpan avec un ou la propriété TotalDays).

7
Lucero

Vous pouvez implémenter une méthode d'extension DateTime.

Créez une nouvelle classe pour vos méthodes d'extension:

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;
        }
    }
}

Et maintenant, partout dans votre code, où voulez-vous effectuer ce test, vous devez inclure l’utilisation de:

using ExtensionMethods;

Et ensuite, utilisez la méthode d'extension:

newsStory.WhenAdded.IsSameDay(DateTime.Now);
5
Benjamim

Pour votre information,

newsStory.Date == DateTime.Today

renverra le même résultat de comparaison que le codage

newsStory == DateTime.Today

newsStory est un objet DateTime

.NET est suffisamment intelligent pour déterminer que vous souhaitez comparer en fonction de la date uniquement et l’utilise pour la comparaison interne. Vous ne savez pas pourquoi et avez du mal à trouver de la documentation pour ce comportement.

5
guck

Comme Guillame suggéré dans un commentaire , comparez les valeurs des propriétés Date:

newStory.Date == DateTime.Now.Date
3
Anton Gogolev

Essaye ça:

newsStory.Date == DateTime.Today
2
Philip Wallace

eh bien, DateTime a une propriété "Date" et vous pouvez simplement comparer sur cette base. Cependant, au vu de la documentation, il semble que l'obtention de cette propriété instancie en réalité une nouvelle date et heure avec le composant time défini sur minuit. Elle peut donc être plus lente que d'accéder à chaque composant individuel, bien que beaucoup plus propre et lisible.

1
Brian Schroth

if (newsStory.ToShortDateString() == DateTime.Today.ToShortDateString()) return "Todtay";

0
Sasan Salem