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

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

Ответы [ 9 ]

195 голосов
/ 12 мая 2010

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

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 , который дает другие полезные свойства.

55 голосов
/ 12 мая 2010

Вы хотите структуру TimeSpan:

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);
}
26 голосов
/ 12 мая 2010

Вам нужно использовать DateTime classs 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));
10 голосов
/ 12 мая 2010

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

Вот пример:

DateTime start = DateTime.Now;
// Do some work
TimeSpan timeDiff = DateTime.Now - start;
timeDiff.TotalMilliseconds;
4 голосов
/ 12 мая 2010

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

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

3 голосов
/ 15 апреля 2015
 var startDate = new DateTime(2007, 3, 24);

 var endDate = new DateTime(2009, 6, 26);

 var dateDiff = endDate.Subtract(startDate);

 var date = string.Format("{0} years {1} months {2} days", (int)dateDiff.TotalDays / 365, 
 (int)(dateDiff.TotalDays % 365) / 30, (int)(dateDiff.TotalDays % 365) / 30);

 Console.WriteLine(date);
2 голосов
/ 06 июля 2013
private void button1_Click(object sender, EventArgs e)
{
    TimeSpan timespan;
    timespan = dateTimePicker2.Value - dateTimePicker1.Value;
    int timeDifference = timespan.Days;
    MessageBox.Show(timeDifference.ToString());
}
2 голосов
/ 12 мая 2010

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

TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);
1 голос
/ 28 мая 2014

Вы можете использовать следующий способ для достижения разницы между двумя объектами Datetime. Предположим, что существуют объекты DateTime dt1 и dt2, а затем код.

TimeSpan diff = dt2.Subtract(dt1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...