2015-07-31 2 views
3

Как рассчитать время между нулевым значением DateTimeOffset? to DateTimeOffset.Now?Разница между DateTimeOffset? (Nullable) и DateTimeOffset.Now

мне нужен результат, как «х день у часов назад»

я начал делать что-то вроде этого.

var creationTime = //A nullable DateTimeOffset on Database  
    var difference = DateTimeOffset.Now.Subtract(creationTime); 

Но так как creationTime является допустимым временем, это дает мне ошибку, и я не могу найти разницу.

+0

Вы можете использовать оператор '-'. –

ответ

7

В зависимости от того, какой разницы вы ожидаете от NULL значения базы данных вы можете просто справиться с этим с помощью ?? оператора:

DateTimeOffset? creationTime = null; // A nullable DateTimeOffset on Database 
DateTimeOffset rightnow = DateTimeOffset.Now; 
DateTimeOffset somewhen = creationTime ?? rightnow; // if NULL, it's NOW 
var difference = rightnow.Subtract(somewhen); 

(может быть, конечно, shortend с использованием ?? только при чтении значения базы данных)

+0

Спасибо @Filburt. Это сработало с первой попытки. Я очень ценю это. – nishantvodoo

3

Первое испытание, если оно имеет значение с HasValue и если это использовать Value свойство, чтобы получить фактическое значение

if(creationTime.HasValue) 
    TimeSpan difference = DateTimeOffset.Now.Subtract(creationTime.Value); 

Или если у вас есть значение по умолчанию в виду, вы можете использовать GetValueOrDefault

TimeSpan difference = DateTimeOffset.Now.Subtract(creationTime.GetValueOrDefault(default)); 

Окончательный вариант будет просто использовать оператор -.

TimeSpan? difference = DateTimeOffset.Now - creationTime; 

, но обратите внимание, что difference будет TimeSpan? и будет null если creationTime является null.

+0

Спасибо вам большое. Я буду придерживаться идеи проверки ценности в будущем. – nishantvodoo

0

На всякий случай кто-то сталкивается с этой проблемой, вот метод расширения, который я придумал с помощью приведенных выше ответов.

namespace Extensions{ 
public static class DateExtensions 
{ 
    public static string GetDifferenceTillNow(this DateTimeOffset? datetimeoffset) { 
     DateTimeOffset? creationTime = datetimeoffset; 
     DateTimeOffset rightnow = DateTimeOffset.Now; 
     DateTimeOffset somewhen = creationTime ?? rightnow; 
     TimeSpan difference = rightnow.Subtract(somewhen); 
     return difference.Days.ToString() +" days & " + difference.Hours.ToString() + " hours ago"; 
    } 
    } 
} 
Смежные вопросы