Question

Utilisation de .NET 3.5

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

Jusqu'à présent, j'ai le currentime:

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

Je découpage sur la façon d'obtenir l'intervalle de temps converti et comparé. Est-ce que ce travail?

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.

Était-ce utile?

La solution

Pour la vérification pendant une durée d'utilisation de jour:

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
}

Autres conseils

Quelques bonnes réponses ici, mais pas couvrir le cas de votre temps de commencer à être dans un autre jour que votre temps final. Si vous devez enjamber la limite du jour, alors quelque chose comme ça peut 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 inclus et que cela suppose encore moins d'une différence de 24 heures entre start et stop.

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 dans un TimeSpan, vous pouvez utiliser:

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

Une petite fonction d'extension simple pour ceci:

public static bool IsBetween(this DateTime now, TimeSpan start, TimeSpan end)
{
    var time = now.TimeOfDay;
    // If the start time and the end time is in the same day.
    if (start <= end)
        return time >= start && time <= end;
    // The start time and end time is on different days.
    return time >= start || time <= end;
}

Essayez d'utiliser l'objet TimeRange en C # pour compléter votre objectif.

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

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

est ici où je suis arrivé cet exemple d'utiliser TimeRange

La propriété TimeOfDay retourne 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
}

En outre, new DateTime() est le même que DateTime.MinValue et sera toujours égal à 1/1/0001 12:00:00 AM. (Types de valeur ne peuvent pas avoir des valeurs par défaut non vides) Vous voulez utiliser DateTime.Now.

Vous êtes très proche, le problème est que vous comparez DateTime à un TimeOfDay. Ce que vous devez faire est d'ajouter la propriété .TimeOfDay à la fin de fonctions Convert.ToDateTime ().

Sera-ce plus simple pour traiter le cas limite de jour? :)

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

bool bMatched = now.TimeOfDay >= start.TimeOfDay &&
                now.TimeOfDay < end.TimeOfDay;
// Handle the boundary case of switching the day across mid-night
if (end < start)
    bMatched = !bMatched;

if(bMatched)
{
    // match found, current time is between start and end
}
else
{
    // otherwise ... 
}

LINQ nous pouvons simplifier par ce

 Enumerable.Range(0, (int)(to - from).TotalHours + 1)
            .Select(i => from.AddHours(i)).Where(date => date.TimeOfDay >= new TimeSpan(8, 0, 0) && date.TimeOfDay <= new TimeSpan(18, 0, 0))
 using System;

 public class Program
 {
    public static void Main()
    {
        TimeSpan t=new TimeSpan(20,00,00);//Time to check

        TimeSpan start = new TimeSpan(20, 0, 0); //8 o'clock evening

        TimeSpan end = new TimeSpan(08, 0, 0); //8 o'clock Morning

        if ((start>=end && (t<end ||t>=start))||(start<end && (t>=start && t<end)))
        {
           Console.WriteLine("Mached");
        }
        else
        {
            Console.WriteLine("Not Mached");
        }

    }
 }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top