Получение промежутка времени между двумя временами в С#?
У меня есть два текстовых поля. Один для часов во времени и один для часов. Время будет помещено в этот формат:
Hours:Minutes
Допустим, я зашел в 7:00 утра и выходил в 2:00 вечера.
С моим текущим кодом я получаю разницу в 2 часа, но это должно быть 7 часов. Как мне это сделать на С#. Я собирался конвертировать в 24 часа, разрешив пользователю выбрать AM или PM, но я запутался.
Итак, в основном, как бы я вычислил разницу между часами между ними?
Я попробовал это, но получил 2 часа, а не 7, когда я подключил номера.
DateTime startTime = Convert.ToDateTime(textBox1.Text);
DateTime endtime = Convert.ToDateTime(textBox2.Text);
TimeSpan duration = startTime - endtime;
Ответы
Ответ 1
string startTime = "7:00 AM";
string endTime = "2:00 PM";
TimeSpan duration = DateTime.Parse(endTime).Subtract(DateTime.Parse(startTime));
Console.WriteLine(duration);
Console.ReadKey();
Будет выходной: 07:00:00.
Это также работает, если пользователь вводит военное время:
string startTime = "7:00";
string endTime = "14:00";
TimeSpan duration = DateTime.Parse(endTime).Subtract(DateTime.Parse(startTime));
Console.WriteLine(duration);
Console.ReadKey();
Выходы: 07:00:00.
Чтобы изменить формат: duration.ToString(@"hh\:mm")
Более подробная информация на: http://msdn.microsoft.com/en-us/library/ee372287.aspx
Приложение:
За прошедшие годы меня несколько беспокоило, что это самый популярный ответ, который я когда-либо давал; Оригинальный ответ так и не объяснил, почему код OP не работал, несмотря на то, что он совершенно действителен. Единственная причина, по которой он получает так много голосов, состоит в том, что сообщение появляется в Google, когда люди ищут комбинацию терминов "С#", "интервал времени" и "между".
Ответ 2
Вы можете использовать конструктор TimeSpan, который занимает много времени для Ticks:
TimeSpan duration = new TimeSpan(endtime.Ticks - startTime.Ticks);
Ответ 3
Две точки:
-
Проверьте свои входы. Я не могу представить ситуацию, когда вы получите 2 часа, вычитая значения времени, о которых вы говорите. Если я это сделаю:
DateTime startTime = Convert.ToDateTime("7:00 AM");
DateTime endtime = Convert.ToDateTime("2:00 PM");
TimeSpan duration = startTime - endtime;
... В результате получается -07:00:00
. И даже если я забуду указать значение AM/PM:
DateTime startTime = Convert.ToDateTime("7:00");
DateTime endtime = Convert.ToDateTime("2:00");
TimeSpan duration = startTime - endtime;
... Я получаю 05:00:00
. Таким образом, либо ваши входы не содержат значений, которые вы указали, либо находитесь в среде с машиной, где они начинаются с неожиданного анализа. Или вы на самом деле не получаете результаты, о которых вы сообщаете.
-
Чтобы найти разницу между временем начала и окончания, вам нужно сделать endTime - startTime
, а не наоборот.
Ответ 4
Еще один способ (дольше) В VB.net [Say 2300 Start и 0700 Finish на следующий день]
Если tsStart > tsFinish Then
' 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)))