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

Difference between DateTimeOffset?(Nullable) and DateTimeOffset.Now

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

我需要 "x day y hours ago"

这样的结果

我是从做这样的事情开始的。

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

但是由于 creationTime 是一个可以为 null 的时间,它给了我一个错误,我真的找不到区别。

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

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

首先测试它是否具有 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?,如果 creationTimenull,则将是 null

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

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";
    }
  }
}