it-roy-ru.com

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

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

TimeSpan? variable = datevalue1 - datevalue2;

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

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

161
reggie

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

109
Hans Olsson

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

var hours = (datevalue1 - datevalue2).TotalHours;
161
MarkKGreenway

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

71
safi

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

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

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

38
Ilya Kogan

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

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

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

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

1
smurtagh
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)
0
Balachandar Palanisamy