195 votes

Vérifier si l'heure actuelle est comprise dans une plage horaire

Utilisation de .NET 3.5

Je veux déterminer si l'heure actuelle est comprise dans un intervalle de temps.

Pour l'instant, j'ai le courant :

DateTime currentTime = new DateTime();
currentTime.TimeOfDay;

Je n'arrive pas à trouver comment convertir et comparer l'intervalle de temps. Cela fonctionnerait-il ?

if (Convert.ToDateTime("11:59") <= currentTime.TimeOfDay 
    && Convert.ToDateTime("13:01") >= currentTime.TimeOfDay)
{
   //match found
}

UPDATE1 : Merci à tous pour vos suggestions. Je ne connaissais pas la fonction TimeSpan.

0 votes

3 votes

Devez-vous vous préoccuper du passage à minuit ?

1 votes

Franchir minuit n'est pas un problème, mais tout ce qui dépasse minuit est un fléau pour mon expérience de programmation...

324voto

Frank Bollack Points 10208

Pour vérifier l'utilisation d'une heure de la journée :

TimeSpan start = new TimeSpan(10, 0, 0); //10 o'clock
TimeSpan end = new TimeSpan(12, 0, 0); //12 o'clock
TimeSpan now = DateTime.Now.TimeOfDay;

if ((now > start) && (now < end))
{
   //match found
}

Pour les temps absolus, utiliser :

DateTime start = new DateTime(2009, 12, 9, 10, 0, 0)); //10 o'clock
DateTime end = new DateTime(2009, 12, 10, 12, 0, 0)); //12 o'clock
DateTime now = DateTime.Now;

if ((now > start) && (now < end))
{
   //match found
}

0 votes

Comment compter le nombre de correspondances ? Par exemple, je veux compter combien de samedis et de dimanches se trouvent dans l'intervalle.

0 votes

@pmbiesiada : Ceci est complètement hors du champ de la question originale (et de la réponse). Vous devriez en faire une nouvelle question, mais faites une recherche ici sur SO si quelque chose comme ça a déjà été répondu. Bonne chance.

2 votes

Et s'il y a des heures différentes pour des jours différents ? Est-il possible de les comparer facilement ? stackoverflow.com/questions/22769557/

175voto

Nick Points 322

Quelques bonnes réponses ici mais aucune ne couvre le cas où votre heure de début est dans un jour différent de votre heure de fin. Si vous avez besoin de chevaucher la frontière entre les jours, quelque chose comme ceci peut vous aider :

TimeSpan start = TimeSpan.Parse("22:00"); // 10 PM
TimeSpan end = TimeSpan.Parse("02:00");   // 2 AM
TimeSpan now = DateTime.Now.TimeOfDay;

if (start <= end)
{
    // start and stop times are in the same day
    if (now >= start && now <= end)
    {
        // current time is between start and stop
    }
}
else
{
    // start and stop times are in different days
    if (now >= start || now <= end)
    {
       // current time is between start and stop
    }
}

Notez que dans cet exemple, les limites de temps sont inclusives et que cela suppose toujours une différence de moins de 24 heures entre start y stop .

1 votes

Et s'il y a des heures différentes pour des jours différents ? Est-il possible de les comparer facilement ? stackoverflow.com/questions/22769557/

0 votes

Bon point, c'est logique. Si le temps mesuré passe par minuit, ce serait la seule réponse qui serait encore correcte.

1 votes

Merci, après des heures j'ai essayé pour 11:57 pm et ça a marché : TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);

18voto

JDunkerley Points 7237
if (new TimeSpan(11,59,0) <= currentTime.TimeOfDay && new TimeSpan(13,01,0) >=  currentTime.TimeOfDay)
{
   //match found
}

si vous voulez vraiment analyser une chaîne de caractères en un TimeSpan, vous pouvez utiliser :

    TimeSpan start = TimeSpan.Parse("11:59");
    TimeSpan end = TimeSpan.Parse("13:01");

0 votes

Merci, après des heures j'ai essayé pour 11:57 pm et ça a marché : TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);

16voto

stewsha Points 563

Essayez d'utiliser l'objet TimeRange en C# pour atteindre votre objectif.

TimeRange timeRange = new TimeRange();
timeRange = TimeRange.Parse("13:00-14:00");

bool IsNowInTheRange = timeRange.IsIn(DateTime.Now.TimeOfDay);
Console.Write(IsNowInTheRange);

Voici où j'ai trouvé cet exemple d'utilisation de TimeRange

16 votes

TimeRange n'est pas une classe d'une bibliothèque C#. Il s'agit d'une classe externe qui peut être téléchargée à partir du lien ci-dessus.

9voto

SLaks Points 391154

Le site TimeOfDay propriété renvoie un TimeSpan valeur.

Essayez le code suivant :

TimeSpan time = DateTime.Now.TimeOfDay;

if (time > new TimeSpan(11, 59, 00)        //Hours, Minutes, Seconds
 && time < new TimeSpan(13, 01, 00)) {
    //match found
}

Aussi, new DateTime() est la même chose que DateTime.MinValue et sera toujours égal à 1/1/0001 12:00:00 AM . (Les types de valeurs ne peuvent pas avoir de valeurs par défaut non vides). DateTime.Now .

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