Отображение разницы между двумя значениями datetime в часах

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

TimeSpan? variable = datevalue1 - datevalue2;

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

EDIT: Поскольку timepan был nullable, я не мог использовать свойство total hours. Теперь я могу использовать его, выполнив TimeSpanVal.Value.TotalHours;

Ответ 1

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

Ответ 2

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

var hours = (datevalue1 - datevalue2).TotalHours;

Ответ 3

В этом примере мы создаем два объекта 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 );

Результат:

Time Difference (seconds): 15
Time Difference (minutes): 1
Time Difference (hours): 0
Time Difference (days): 0

Ответ 4

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

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

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

Ответ 5

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

if ( DateTime.Now.Subtract(Convert.ToDateTime(objDateValueFromDatabase.CreatedOn)).TotalHours > 24 ) 
{ 
... 
} 

Ответ 6

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

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

Ответ 7

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)

Ответ 8

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

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 имеет всю встроенную логику для обработки логического результата.