Avoir un intervalle de temps entre deux temps en C#?

j'ai deux boîtes de texte. Un pour une horloge dans le temps et l'un pour l'horloge. Les horaires seront mis dans ce format:

Hours:Minutes

disons que j'ai pointé à 7h00 et que j'ai pointé à 14h00.

Avec mon code actuel, j'obtiens une différence de 2 heures, mais il devrait être de 7 heures. Comment pourrais-je le faire en C#. J'allais passer à la 24 heures, en laissant l'utilisateur choisir AM ou PM, mais je me suis embrouillé.

donc, en gros, comment je calculerais la différence des heures entre les deux fois?

j'ai essayé, mais j'ai eu 2 heures et pas 7 quand j'ai branché les numéros.

DateTime startTime = Convert.ToDateTime(textBox1.Text);
DateTime endtime = Convert.ToDateTime(textBox2.Text);

TimeSpan duration = startTime - endtime;
36
demandé sur atk 2012-09-21 01:42:58

4 réponses

string startTime = "7:00 AM";
string endTime = "2:00 PM";

TimeSpan duration = DateTime.Parse(endTime).Subtract(DateTime.Parse(startTime));

Console.WriteLine(duration);
Console.ReadKey();

sortie de Will: 07:00: 00.

Il fonctionne également si la saisie de l'utilisateur militaires heure:

string startTime = "7:00";
string endTime = "14:00";

TimeSpan duration = DateTime.Parse(endTime).Subtract(DateTime.Parse(startTime));

Console.WriteLine(duration);
Console.ReadKey();

sorties: 07:00: 00.

Pour changer le format suivant:duration.ToString(@"hh\:mm")

Plus d'info sur:http://msdn.microsoft.com/en-us/library/ee372287.aspx

72
répondu Kittoes0124 2012-09-20 21:55:21

Vous pouvez utiliser le durée constructeur qui prend un long pour les Tiques:

 TimeSpan duration = new TimeSpan(endtime.Ticks - startTime.Ticks);
7
répondu Tim Lehner 2012-09-20 21:46:37

deux points:

  1. Vérifiez vos entrées. Je ne peux pas imaginer une situation où vous obtiendriez 2 heures en soustrayant les valeurs de temps dont vous parlez. Si je fais ceci:

        DateTime startTime = Convert.ToDateTime("7:00 AM");
        DateTime endtime = Convert.ToDateTime("2:00 PM");
        TimeSpan duration = startTime - endtime;
    

    ... J'obtiens -07:00:00 comme résultat. Et même si j'ai oublié de fournir la valeur AM/PM:

        DateTime startTime = Convert.ToDateTime("7:00");
        DateTime endtime = Convert.ToDateTime("2:00");
        TimeSpan duration = startTime - endtime;
    

    ... J'obtiens 05:00:00. Donc, soit vos entrées ne contiennent pas les valeurs que vous avez listées, soit vous êtes dans un environnement machine où elles sont analysées de manière inattendue. Ou vous n'obtenez pas vraiment les résultats que vous signalez.

  2. Pour trouver la différence entre un début et une heure de fin, vous devez faire endTime - startTime, et non pas l'inverse.

4
répondu StriplingWarrior 2012-09-20 21:52:51

une Autre façon ( plus ) VB.net [ Dire 2300 de Début et de 0700 Arrivée prochaine journée ]

Si tsStart > tsFinish Puis

                            ' Take Hours difference and adjust accordingly
                            tsDifference = New TimeSpan((24 - tsStart.Hours) + tsFinish.Hours, 0, 0)

                            ' Add Minutes to Difference
                            tsDifference = tsDifference.Add(New TimeSpan(0, Math.Abs(tsStart.Minutes - tsFinish.Minutes), 0))


                            ' Add Seonds to Difference
                            tsDifference = tsDifference.Add(New TimeSpan(0, 0, Math.Abs(tsStart.Seconds - tsFinish.Seconds)))
0
répondu SMA 2014-03-25 17:08:46