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

nis*_*doo 3 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);
Run Code Online (Sandbox Code Playgroud)

但由于creationTime是一个可以为空的时间,它给了我一个错误,我无法找到差异.

Fil*_*urt 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);
Run Code Online (Sandbox Code Playgroud)

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


juh*_*arr 5

首先测试它是否有一个值HasValue以及它是否使用该Value属性来获取实际值

if(creationTime.HasValue)
    TimeSpan difference = DateTimeOffset.Now.Subtract(creationTime.Value);
Run Code Online (Sandbox Code Playgroud)

或者,如果您有一个默认值,您可以使用 GetValueOrDefault

TimeSpan difference = DateTimeOffset.Now.Subtract(creationTime.GetValueOrDefault(default));
Run Code Online (Sandbox Code Playgroud)

最后一个选择是只使用-运算符。

TimeSpan? difference = DateTimeOffset.Now - creationTime;
Run Code Online (Sandbox Code Playgroud)

但请注意,这difference将是 aTimeSpan?并且将是nullif creationTimeis null