Отображение разницы между двумя значениями даты и времени в часах - PullRequest
171 голосов
/ 09 февраля 2011

Я получаю два значения даты и времени из базы данных.Как только значение получено, мне нужна разница между этими двумя значениями.Для этого я создаю переменную временного интервала для хранения разности значений двух дат.

TimeSpan? variable = datevalue1 - datevalue2;

Теперь мне нужно показать разницу, которая хранится в переменной Timespan с точки зрения количества часов.Я сослался на TimeSpan.TotalHours , но по какой-то причине не смог применить то же самое.Как я могу это сделать?Я использую C # в проекте MVC.Мне просто нужно показать значение разницы в часах?

РЕДАКТИРОВАТЬ: Так как временной интервал был обнуляемым, я не мог использовать общее количество часов.Теперь я могу использовать его, выполнив TimeSpanVal.Value.TotalHours ;

Ответы [ 8 ]

172 голосов
/ 09 февраля 2011

Вы также можете посмотреть на

var hours = (datevalue1 - datevalue2).TotalHours;
111 голосов
/ 09 февраля 2011

Я думаю, что вы запутались, потому что вы не объявили TimeSpan, вы объявили TimeSpan?, что обнуляемо TimeSpan. Либо уберите знак вопроса, если вам не нужно, чтобы он был обнуляемым, либо используйте variable.Value.TotalHours.

76 голосов
/ 09 февраля 2011

В этом примере мы создаем два объекта datetime, один с текущим временем, а другой с 75 секундами, добавленными к текущему времени.Затем мы вызовем метод .Subtract () для второго объекта DateTime.Это вернет объект TimeSpan.Получив объект TimeSpan, мы можем использовать свойства TimeSpan для получения фактических часов, минут и секунд.

DateTime startTime = DateTime.Now;

 DateTime endTime = DateTime.Now.AddSeconds( 75 );

 TimeSpan span = endTime.Subtract ( startTime );
 Console.WriteLine( "Time Difference (seconds): " + span.Seconds );
 Console.WriteLine( "Time Difference (minutes): " + span.Minutes );
 Console.WriteLine( "Time Difference (hours): " + span.Hours );
 Console.WriteLine( "Time Difference (days): " + span.Days );

Результат:

Разница во времени (в секундах):15 Разница во времени (минуты): 1 Разница во времени (часы): 0 Разница во времени (дни): 0

38 голосов
/ 09 февраля 2011

Есть ли причина, по которой вы используете Nullable?

Если вы хотите использовать Nullable, тогда вы можете написать variable.Value.TotalHours.

Или вы можете просто написать: (datevalue1 - datevalue2).TotalHours.

7 голосов
/ 05 мая 2014

Вот еще один пример вычитания двух дат в C # ...

if ( DateTime.Now.Subtract(Convert.ToDateTime(objDateValueFromDatabase.CreatedOn)).TotalHours > 24 ) 
{ 
... 
} 
2 голосов
/ 26 апреля 2018

более точный способ оплаты рабочего времени сотрудника или других требований к точности: :

decimal DeterminePreciseHours(DateTime startTimestamp, DateTime stopTimestamp)
{
    var span = (stopTimestamp - startTimestamp).Value;
    decimal total = (decimal)span.TotalMilliseconds / 60 / 60 / 1000;
    return Math.Round(total, PRECISION_CONSTANT);
}

https://dotnetfiddle.net/tVIoVJ

0 голосов
/ 07 июля 2019

ВАУ, я должен сказать: будь проще:

MessageBox.Show("Result: " + (DateTime.Now.AddDays(10) > DateTime.Now));

Result: True

и:

MessageBox.Show("Result: " + DateTime.Now.AddDays(10).Subtract(DateTime.Now));

Result: 10.00:00:00

Объект DateTime имеет всю встроенную логику для обработки логического результата.

0 голосов
/ 09 октября 2017
var startTime = new TimeSpan(6, 0, 0); // 6:00 AM
var endTime = new TimeSpan(5, 30, 0); // 5:30 AM 
var hours24 = new TimeSpan(24, 0, 0);
var difference = endTime.Subtract(startTime); // (-00:30:00)
difference = (difference.Duration() != difference) ? hours24.Subtract(difference.Duration()) : difference; // (23:30:00)

также может добавить разницу между датами, если сравнить две разные даты

new TimeSpan(24 * days, 0, 0)
...