Подтвердить что ты не робот

Получение промежутка времени между двумя временами в С#?

У меня есть два текстовых поля. Один для часов во времени и один для часов. Время будет помещено в этот формат:

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;
4b9b3361

Ответ 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)))