Как я получаю разницу во времени между два DateTime
объекты с помощью C#?
В следующем примере показано, как это сделать:
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 , который дает другие полезные свойства.
Вам нужна 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);
}
Вам нужно использовать метод 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));
ЕСЛИ они оба являются значениями времени UTC, вы можете сделать TimeSpan diff = dateTime1 - dateTime2;
В противном случае ваш шанс получить правильный ответ во всех возможных случаях равен нулю.
Обычно я вычитаю два DateTime и получаю TimeSpan, который скажет мне разницу.
Вот пример:
DateTime start = DateTime.Now;
// Do some work
TimeSpan timeDiff = DateTime.Now - start;
timeDiff.TotalMilliseconds;
Вам необходимо использовать TimeSpan . Вот пример кода:
TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);