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

159

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

TinTin
источник

Ответы:

227

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

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

Даниэль Реншоу
источник
5
Чтобы отобразить разницу, сделать что - то вроде этого: Console.WriteLine((a - b).ToString(@"hh\:mm\:ss")). См .: MSDN Custom TimeSpan Format
ishmael
Это сработало для меня. Я просто хотел узнать, сколько секунд потребуется клиенту, чтобы сделать вызов REST и получить ответ.
Зигглер
1
Обратите внимание на использование TotalMinutes! (нет Minutes)
Шахар Шокрани,
64

Вы хотите 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);
}
ChrisF
источник
привет, если datetime2 - 09:00, а dateTime1 - 18:00, тогда diff - 09 часов 00 минут. тогда каково уравнение для datetime2: 21:00, а dateTime1 - 03:00, тогда разница отрицательная и неправильная. Как это решить?
Пранеш Джанартанан
@Pranesh - если объекты содержат дату, тогда не должно быть проблемы. Если они не содержат времени, то возьмите абсолютную разницу или добавьте 24 часа к временному интервалу, чтобы получить положительную разницу. Что будет правильно, будет зависеть от вашей заявки.
ChrisF
Да, я уже удалил этот комментарий! Можете ли вы показать мне пример кода для вашего объяснения?
Пранеш Джанартанан
30

Вам нужно использовать метод Subtract класса DateTime , который возвращает 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));
Nate
источник
10

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

Вот пример:

DateTime start = DateTime.Now;
// Do some work
TimeSpan timeDiff = DateTime.Now - start;
timeDiff.TotalMilliseconds;
Дарик
источник
4

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

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

Ян Мерсер
источник
3
 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);
Mukund
источник
2

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

TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);
Джейсон Уэбб
источник
2
Или простоTimeSpan sincelast = DateTime.Now - LastUpdate;
Бен М
2
private void button1_Click(object sender, EventArgs e)
{
    TimeSpan timespan;
    timespan = dateTimePicker2.Value - dateTimePicker1.Value;
    int timeDifference = timespan.Days;
    MessageBox.Show(timeDifference.ToString());
}
Вонг Лок Пан
источник
2

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

TimeSpan diff = dt2.Subtract(dt1);
Санни Сандип
источник