Réglage de l'heure à 23:59:59 [dupliquer]
Double Possible:
Comment puis-je spécifier la dernière heure de la journée avec DateTime
J'ai besoin de comparer une plage de dates et il manque des lignes dont la date est la date de comparaison supérieure mais l'heure est supérieure à minuit. Existe-t-il un moyen de définir le temps de la comparaison supérieure à 23:59:59?
7 réponses
C'est une solution possible:
yourDateTime.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
Pourquoi ne pas avoir la comparaison supérieure étant minuit le jour après le dernier qui vous intéresse, puis l'utiliser avec une comparaison exclusive?
DateTime upperExclusive = lastInclusive.Date.AddDays(1);
if (dateInclusive >= date && date < upperExclusive)
{
....
}
Cela ressemble à une solution plus propre que de trouver la dernière seconde de la journée - à part toute autre chose, il vous manquerait toujours des valeurs de 23:59:59.500 etc avec votre schéma actuel.
Plug obligatoire: Je ne suis pas un grand fan de L'API Date/heure BCL. Vous pouvez garder un œil sur Noda Temps - un port de Joda temps à. NET.
Si vous faites une comparaison, pourquoi ne pas comparer avec moins que le début du lendemain?
Par exemple. si c'était une requête Linq:
someList.Where(x => (currentDaysDate <= x.ItemDate ) && (x.ItemDate < nextDaysDate))
Créer une méthode d'extension EndOfDay
public static DateTime EndOfDay (this DateTime d)
{
return DateTime.Parse(d.ToShortDateString().Trim() + " 23:59:59");
}
Il suffit D'utiliser un jour plus tard que la comparaison supérieure, et <
sur le côté supérieur au lieu de <=
. De cette façon, vous pouvez obtenir des temps qui sont encore plus tard (fraction de seconde) que celui que vous avez spécifié.
Alternativement, comparez en utilisant la propriété DateTime.Date
au lieu de la DateTime directement. Cela "dépouillera" la partie de temps, de sorte que vos dates dans la recherche seront automatiquement traitées comme minuit.
Oui, ce constructeur DateTime - http://msdn.microsoft.com/en-us/library/272ba130.aspx vous permet de spécifier la date et les heures, les minutes et les secondes.
Si l'heure ne vous inquiète pas du tout, vous pouvez utiliser la propriété Date
de DateTime
, qui renvoie uniquement la partie date (avec l'heure définie sur 00:00:0000)
if(MyDate.Date >= StartDate.Date && MyDate.Date <= EndDate.Date)
{
//Code here
}