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


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

TimeSpan? variable = datevalue1 - datevalue2;

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

изменить: Поскольку период был пустой, я не мог использовать всего часов собственность. Теперь я могу использовать его, делая TimeSpanVal.Значение.;

7 153

7 ответов:

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

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

var hours = (datevalue1 - datevalue2).TotalHours;

в примере мы создаем два объекта datetime, один с текущим временем, а другой с 75 секундами, добавленными к текущему времени. Затем мы вызовем метод .Вычитание () для второго объекта 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

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

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

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

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

if ( DateTime.Now.Subtract(Convert.ToDateTime(objDateValueFromDatabase.CreatedOn)).TotalHours > 24 ) 
{ 
... 
} 
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)

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

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