DateTimeOffset?(可为空)和DateTimeOffset. now之间的差异

本文关键字:DateTimeOffset now 之间 | 更新日期: 2023-09-27 18:05:42

如何计算可为空的DateTimeOffset之间的时间?DateTimeOffset。现在?

我需要像"x day y hours ago"这样的结果

我开始是这样做的。

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

但是由于creationTime是一个可空的时间,它给了我一个错误,我不能真正找到差异

DateTimeOffset?(可为空)和DateTimeOffset. now之间的差异

根据您期望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;

但请注意,如果creationTimenull,那么difference将是TimeSpan?,并且将是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";
    }
  }
}