J'essaie de développer une application simple pour mes compétences en c #, mais je suis bloqué et nouveau dans la fonctionnalité du temps avec c #,

ce dont j'ai besoin:

J'ai 3 zones de texte qui contiendront l'heure de début, l'heure de fin et l'intervalle de temps.

Dire que l'utilisateur a entré 7h00, 12h00 et 60 minutes, il le stockera dans une table de données et l'ajoutera dans une zone de liste.

07H00

8 h 00

09H00

10:00 DU MATIN

11H00

12 h 00

approche actuelle:

Je pense que j'ai besoin d'utiliser le DateTime.AddMinutes(interval) mais comment vais-je arriver à la logique de l'arrêt s'il atteint l'heure de fin? en utilisant la méthode DateTime? Je ne sais vraiment pas quoi utiliser, j'ai vu TimeRange, TimeSpan etc.

-1
devbbg 19 mai 2020 à 06:49

3 réponses

Meilleure réponse

Vous pouvez utiliser TimeSpan et DateTime ensemble (pour calculer et imprimer respectivement)

TimeSpan start = DateTime.Parse("7:00 AM").TimeOfDay;
TimeSpan end = DateTime.Parse("12:00 PM").TimeOfDay;

TimeSpan interval = new TimeSpan(0, 60, 0);

// If Start is bigger than end, Add a day to the end.
if (start > end)
    end = end.Add(new TimeSpan(1, 0, 0, 0));

while (true)
{
    Console.WriteLine((new DateTime() + start).ToString("hh:mm tt"));

    start = start.Add(interval);
    if (start > end)
        break;

}

La sortie ressemble à ceci,

07:00 AM
08:00 AM
09:00 AM
10:00 AM
11:00 AM
12:00 PM

Documentation MS sur TimeSpan

0
Jawad 19 mai 2020 à 14:51

Vous pouvez utiliser TimeSpan avec l'opérateur logique booléen pour tester si le currentTime est inférieur à votre endTime.

Voici un exemple de code.

TimeSpan startTime;
int interval;
TimeSpan tInterval = new TimeSpan(interval, 0, 0);
TimeSpan endTime;
TimeSpan currentTime = startTime;

while( (currentTime = startTime + tInterval) <= endTime)
{
    // add currentTime to list box
}
0
ngeksyo 19 mai 2020 à 04:10

Cela devrait résoudre le problème avec les heures de fin étant "antérieures" à l'heure de début:

    private static void TestTimeSpan()
    {
        int minutes = 60;
        var interval = new TimeSpan(0,minutes,0);
        TimeSpan start = DateTime.Parse("7:00 PM").TimeOfDay;
        TimeSpan end = DateTime.Parse("1:00 AM").TimeOfDay;

        //End of input data--start of solution
        var diffSpan = end - start;
        var diffMinutes = diffSpan.TotalMinutes >  0 ? diffSpan.TotalMinutes : diffSpan.TotalMinutes + (60 * 24);
        var myTimeList = new List<TimeSpan>();

        for(int i = 0; i < diffMinutes + minutes; i += minutes)
        {
            myTimeList.Add(start);
            start = start.Add(interval);
        }

        myTimeList.ForEach(x => Console.WriteLine((new DateTime() + x).ToString("hh:mm tt")));
    }




MODIFIER
La création d'une séquence de valeurs de temps basée sur deux heures d'entrée et un intervalle est simple jusqu'à ce que «l'heure de début» soit antérieure à «l'heure de fin», car il suffit de vérifier si «l'heure de fin» est supérieure à l'heure de début. votre algorithme immédiatement.

Ce code utilise le fait qu'il n'y a que 24 heures dans la journée. Puisque la valeur de l'intervalle est donnée en minutes, nous pouvons l'utiliser pour diviser ces minutes en "étapes" de temps. Ce code continue à parcourir chaque intervalle de temps et à capturer l'heure à cette étape et à l'enregistrer dans un List de TimeSpan (la valeur capturée pourrait facilement être de type string - formatée comme voulu).

L'astuce ici est que lorsque "l'heure de fin" est antérieure à "l'heure de début", nous obtenons un TimeSpan négatif qui est ensuite utilisé pour calculer les étapes vers "l'heure de fin" le jour suivant. C'est là que la partie (60 * 24) [60 minutes x 24 hrs] entre en jeu pour créer les "diffMinutes" correctes en utilisant un opérateur ternaire.

Après cela, le code itère simplement sur List "myTimeList" pour écrire le TimeSpan formaté dans la console. Cependant, cette «liste» n'est qu'une collection portable qui peut être envoyée n'importe où dans votre code pour faire tout ce qui est nécessaire.

Il y a beaucoup d'autres solutions, celle-ci me semble simple.

0
Barns 19 mai 2020 à 12:41