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
}
if (newsStory.WhenAdded.Date == DateTime.Today)
{
}
else
{
}
Devrait faire l'affaire.
if( newsStory.Date == DateTime.Today )
{
// happened today
}
Essayer
if (newsStory.Date == DateTime.Now.Date)
{ /* Story happened today */ }
else
{ /* Story didn't happen today */ }
Ma solution:
private bool IsTheSameDay(DateTime date1, DateTime date2)
{
return (date1.Year == date2.Year && date1.DayOfYear == date2.DayOfYear);
}
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).
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);
Pour votre information,
newsStory.Date == DateTime.Today
renverra le même résultat de comparaison que le codage
newsStory == DateTime.Today
où 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.
Comme Guillame suggéré dans un commentaire , comparez les valeurs des propriétés Date
:
newStory.Date == DateTime.Now.Date
Essaye ça:
newsStory.Date == DateTime.Today
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.
if (newsStory.ToShortDateString() == DateTime.Today.ToShortDateString())
return "Todtay";