DateTimeOffset?(Nullable)和DateTimeOffset.Now之间的区别

时间:2015-07-31 16:19:53

标签: c# datetime nullable datetimeoffset

如何计算可空的DateTimeOffset之间的时间?到DateTimeOffset.Now?

我需要像“x day y hours ago”

这样的结果

我开始做这样的事情。

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

但是因为creationTime是一个可以为空的时间,所以它给了我一个错误,我无法真正找到差异。

3 个答案:

答案 0 :(得分:8)

根据您对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);

(当然可以在读取数据库值时短暂使用??

答案 1 :(得分: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;

但请注意differenceTimeSpan?,如果nullcreationTime,则为null

答案 2 :(得分:0)

万一有人遇到这个问题,这是我在上述答案的帮助下提出的扩展方法。

ModifiedBy