97 votes

Comment puis-je spécifier la dernière heure du jour avec DateTime

Je suis à l'aide d'un System.DateTime objet de permettre à un utilisateur de sélectionner une plage de dates. L'utilisateur est seul en mesure de sélectionner une date (pas le temps) à l'aide d'un tiers calendrier, donc j'ai besoin de spécifier automatiquement le temps de la journée, il doit utiliser (c'est à dire: 00:00:00 et 23:59:59) après la date est choisie.

Comment puis-je spécifier le temps après la date est déjà stocké comme un objet DateTime par le calendrier sélecteur? Je pourrais utiliser l' AddHours, AddMinutes, AddSeconds méthodes, mais celles qui sont relatives à l'heure actuelle qui peut ne pas être 00:00:00.

L' startDate aurez besoin d'avoir un temps de 00:00:00 et endDate ont un temps de 23:59:59 pour tenir compte de l'ensemble des jours.

128voto

Jose Basilio Points 29215

Si un objet DateTime créé et que vous souhaitez remplacer l'heure par la date indiquée pour 23:59:59, vous pouvez utiliser la propriété .Date pour obtenir la date. heure réglée sur 00:00:00, puis ajoutez les heures, les minutes et les secondes. Par exemple:

 var dt = yourDateInstance.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
 

Si vous voulez dire avant 23:59:59, cela devrait également fonctionner:

 var dt = new DateTime(Now.Year, Now.Month, Now.Day, 23, 59, 59);
 

101voto

Jon B Points 26872

Pour obtenir le dernier instant pour aujourd'hui:

 DateTime d = new DateTime(Now.Year, Now.Month, Now.Day);
d = d.AddDays(1);
d = d.AddTicks(-1);
 


En réponse à votre modification, voici ce que je ferais:

 DateTime start = new DateTime(Now.Year, Now.Month, Now.Day);
DateTime end = start.AddDays(1).AddTicks(-1);

// Or - just use end = start.AddDays(1), and use a < for comparison
 

26voto

Peter Drier Points 465

DateTime d = DateTime.Today.AddDays (1) .AddTicks (-1);

14voto

Joe Points 60749

Votre question a déjà été posée, mais à mon humble avis, un meilleur moyen est de ne pas la peine de tenter de soustraire un cocher, un deuxième, ou que ce soit à partir de la fin de la plage, et de les comparer à l'aide de strictement moins de.

De sorte que si vous voulez toutes les dates dans un inclusive gamme de date de début à la date de fin, en ignorant le temps, vous pouvez utiliser les éléments suivants en C#:

if ((myDate >= startDate.Date) && (myDate < endDate.Date.AddDays(1)))
{
    // ... it's in the range
}

ou en T-SQL, en supposant que votre @StartDate et @date de fin sont exactement minuit, quelque chose comme:

WHERE SomeDate >= @StartDate AND SomeDate < DATEADD(d,1,@EndDate)

Mise à JOUR

Mise à jour exemple pour montrer à un large éventail en réponse aux commentaires.

7voto

Erich Mirabal Points 6029
DateTime startDate = DateTime.Today;
DateTime stopDate = startDate.AddDays(1).AddTicks(-1);

Comme une note, DateTime.Today rendements (à partir de MSDN)

D'Un Système.DateTime défini à la date d'aujourd'hui, avec le temps de la composante de 00:00:00.

Donc, comme d'autres l'ont noté, ajouter un jour, puis soustraire le plus petit quantum de temps (une marque), et vous obtenez la dernière période de temps possible pour la journée en cours.

Bien sûr, vous pourriez avoir à réfléchir sur les fuseaux horaires et une telle selon l'endroit où le code s'exécute rapport à l'emplacement de l'utilisateur. L'heure UTC est peut-être bon, mais qui pourrait pousser vous un jour (de toute façon) selon l'endroit où votre code s'exécute.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X