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?

26
demandé sur Community 2010-03-12 20:37:46

7 réponses

C'est une solution possible:

yourDateTime.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
41
répondu Webleeuw 2010-03-12 17:41:12

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.

36
répondu Jon Skeet 2010-03-12 18:05:04

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))
4
répondu Kelsey 2010-03-12 17:42:46

Créer une méthode d'extension EndOfDay

 public static DateTime EndOfDay (this DateTime d)
    {
        return DateTime.Parse(d.ToShortDateString().Trim() + " 23:59:59");
    }
4
répondu Bill Martin 2010-03-12 17:49:06

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.

1
répondu Reed Copsey 2012-08-30 17:05:28

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.

0
répondu logicnp 2010-03-12 17:41:03

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
}
0
répondu adharris 2010-03-12 17:43:26