J'ai deux zones de texte. Un pour une horloge dans le temps et un pour l'horloge. Les temps seront mis dans ce format:
Hours:Minutes
Disons que je suis arrivé à 7h00 et à 14h00.
Avec mon code actuel, la différence est de 2 heures, mais elle devrait être de 7 heures. Comment ferais-je cela en C #. J'allais passer au format 24 heures en laissant l'utilisateur choisir le matin ou le soir, mais j'ai été dérouté.
Donc, en gros, comment pourrais-je calculer la différence d'heures entre les deux heures?
J'ai essayé cela, mais j'ai eu 2 heures et non pas 7 quand j'ai branché les chiffres.
DateTime startTime = Convert.ToDateTime(textBox1.Text);
DateTime endtime = Convert.ToDateTime(textBox2.Text);
TimeSpan duration = startTime - endtime;
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: 07:00:00.
Cela fonctionne aussi si l'utilisateur saisit l'heure militaire:
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:duration.ToString(@"hh\:mm")
Plus d'infos sur:http://msdn.Microsoft.com/en-us/library/ee372287.aspx
Addendum:
Au fil des ans, cela m’a un peu inquiété que c’était la réponse la plus populaire que j’ai jamais donnée; la réponse originale n'expliquait jamais réellement pourquoi le code de l'OP ne fonctionnait pas alors qu'il était est parfaitement valide. La seule raison pour laquelle il obtient autant de votes est que l'article est publié sur Google lorsque les internautes recherchent une combinaison des termes "C #", "timespan" et "between".
Vous pouvez utiliser le constructeur TimeSpan qui prend beaucoup de temps pour les ticks:
TimeSpan duration = new TimeSpan(endtime.Ticks - startTime.Ticks);
Deux points:
Vérifiez vos entrées. Je ne peux pas imaginer une situation dans laquelle vous auriez 2 heures en soustrayant les valeurs de temps dont vous parlez. Si je fais ça:
DateTime startTime = Convert.ToDateTime("7:00 AM");
DateTime endtime = Convert.ToDateTime("2:00 PM");
TimeSpan duration = startTime - endtime;
... Je reçois -07:00:00
comme résultat. Et même si j'oublie de fournir la valeur AM/PM:
DateTime startTime = Convert.ToDateTime("7:00");
DateTime endtime = Convert.ToDateTime("2:00");
TimeSpan duration = startTime - endtime;
... Je reçois 05:00:00
. Ainsi, soit vos entrées ne contiennent pas les valeurs que vous avez répertoriées, soit vous vous trouvez dans un environnement d'ordinateur où elles sont analysées de manière inattendue. Ou vous n'obtenez pas réellement les résultats que vous signalez.
Pour trouver la différence entre une heure de début et une heure de fin, vous devez faire endTime - startTime
, pas l'inverse.
Une autre façon (plus longue) Dans VB.net [Dites 2300 Start et 0700 Finish next day]
Si tsStart> tsFinish Alors
' 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)))