Как узнать, сколько времени прошло между двумя моментами?

Добрый день! Я работаю над тем, чтобы вычислить разницу во времени между временем, выбранным пользователем через `dateTimePicker` (например, 16:25:38), и текущим временем. Затем я хочу вывести результат в `textBox`, но сейчас он отображает время в формате 00:00:00.12345, что включает миллисекунды. <br/> <pre><code class="cs">DateTime localTime = DateTime.Now; DateTime Values = dateTimePicker2.Value; textBox7.Text = string.Format("{0}", localTime.Subtract(Values).ToString());</code></pre> <br/> Как можно отобразить результат без миллисекунд? <br/> Кроме того, мне нужно определить, превышает ли это время одну час, но я сталкиваюсь с проблемами, когда пытаюсь конвертировать строку с миллисекундами обратно во время.
  • 21 декабря 2024 г. 14:23
Ответы на вопрос 2
Чтобы узнать, сколько времени прошло между двумя моментами (дата из `dateTimePicker` и текущее время), вы можете использовать метод `Subtract`, как вы уже делаете, но с немного изменённым подходом для форматирования вывода. Если вам нужно вывести разницу во времени без миллисекунд, вы можете использовать `TimeSpan` и его свойства.

Вот пример того, как это можно сделать:

```csharp
DateTime localTime = DateTime.Now;
DateTime selectedTime = dateTimePicker2.Value;

// Вычисляем разницу во времени
TimeSpan timeDifference = localTime.Subtract(selectedTime);

// Форматируем вывод без миллисекунд
textBox7.Text = string.Format("{0:D2}:{1:D2}:{2:D2}", 
                              (int)timeDifference.TotalHours, 
                              timeDifference.Minutes, 
                              timeDifference.Seconds);

// Проверка, превышает ли разница один час
if (timeDifference.TotalHours > 1)
{
    // Ваш код для обработки случая, когда разница более одного часа
    MessageBox.Show("Разница во времени больше одного часа.");
}
```

### Объяснение кода:

1. **Вычисление разницы**: `localTime.Subtract(selectedTime)` возвращает объект `TimeSpan`, который содержит информацию о разнице во времени.

2. **Форматирование**: В строке форматирования `string.Format("{0:D2}:{1:D2}:{2:D2}", ...)` мы используем форматированные строки для вывода часов, минут и секунд. `D2` формирует числовой вывод с двумя знаками, добавляя ведущий ноль, если это необходимо.

3. **Проверка на час**: Вычисляя `timeDifference.TotalHours`, мы можем легко проверить, превышает ли разница один час.

Теперь ваше приложение будет правильно отображать разницу времени между двумя моментами без миллисекунд, а также сможет проверить, превышает ли эта разница один час.
RTFM: <a href="https://learn.microsoft.com/ru-ru/dotnet/api/system.datetime.tostring?view=net-8.0#system-datetime-tostring(system-string)" rel="nofollow">DateTime.ToString(string)</a>
Похожие вопросы