Как я получаю разницу во времени между двумя объектами DateTime с помощью C#?

Как я получаю разницу во времени между два DateTime объекты с помощью C#?

147
задан Shin 27 August 2016 в 02:13
поделиться

6 ответов

В следующем примере показано, как это сделать:

DateTime a = new DateTime(2010, 05, 12, 13, 15, 00);
DateTime b = new DateTime(2010, 05, 12, 13, 45, 00);
Console.WriteLine(b.Subtract(a).TotalMinutes);

При выполнении выводится «30», поскольку разница между датой и временем составляет 30 минут.

Результатом DateTime.Subtract (DateTime x) является объект TimeSpan , который дает другие полезные свойства.

210
ответ дан 23 November 2019 в 22:35
поделиться

Вам нужна TimeSpan struct:

TimeSpan diff = dateTime1 - dateTime2;

Объект TimeSpan представляет временной интервал (продолжительность времени или прошедшее время), который измеряется как положительное или отрицательное число дней, часов, минут, секунд и долей секунды. Структура TimeSpan может также использоваться для представления времени суток, но только если это время не связано с конкретной датой.

Существуют различные методы получения дней, часов, минут, секунд и миллисекунд из этой структуры.

Если вас интересует только разница, то:

TimeSpan diff = Math.Abs(dateTime1 - dateTime2);

даст вам положительную разницу между временами независимо от порядка.

Если вы получили только компонент времени, но время может быть разделено полуночью, то вам нужно добавить 24 часа к промежутку, чтобы получить фактическую разницу:

TimeSpan diff = dateTime1 - dateTime2;
if (diff < 0)
{
    diff = diff + TimeSpan.FromDays(1);
}
58
ответ дан 23 November 2019 в 22:35
поделиться

Вам нужно использовать метод DateTime класса Subtract, который возвращает TimeSpan.

var dateOne = DateTime.Now;
var dateTwo = DateTime.Now.AddMinutes(-5);
var diff = dateTwo.Subtract(dateOne);
var res = String.Format("{0}:{1}:{2}", diff.Hours,diff.Minutes,diff.Seconds));
28
ответ дан 23 November 2019 в 22:35
поделиться

ЕСЛИ они оба являются значениями времени UTC, вы можете сделать TimeSpan diff = dateTime1 - dateTime2;

В противном случае ваш шанс получить правильный ответ во всех возможных случаях равен нулю.

4
ответ дан 23 November 2019 в 22:35
поделиться

Обычно я вычитаю два DateTime и получаю TimeSpan, который скажет мне разницу.

Вот пример:

DateTime start = DateTime.Now;
// Do some work
TimeSpan timeDiff = DateTime.Now - start;
timeDiff.TotalMilliseconds;
10
ответ дан 23 November 2019 в 22:35
поделиться

Вам необходимо использовать TimeSpan . Вот пример кода:

TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);
2
ответ дан 23 November 2019 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: