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;
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
Vous pouvez utiliser le durée constructeur qui prend un long pour les Tiques:
TimeSpan duration = new TimeSpan(endtime.Ticks - startTime.Ticks);
deux points:
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.Pour trouver la différence entre un début et une heure de fin, vous devez faire
endTime - startTime
, et non pas l'inverse.
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)))