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


159

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

Ответы:


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);
}

привет, если 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));

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);


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);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.