【问题标题】:Difference between DateTimeOffset?(Nullable) and DateTimeOffset.NowDateTimeOffset?(Nullable) 和 DateTimeOffset.Now 之间的区别
【发布时间】:2015-07-31 16:19:52
【问题描述】:

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

我需要像“x 天 y 小时前”这样的结果

我从做这样的事情开始。

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

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

【问题讨论】:

  • 您可以使用- 运算符。

标签: c# datetime nullable datetimeoffset


【解决方案1】:

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

(当然可以简写为??,只是在读取数据库值时使用)

【讨论】:

  • 谢谢@Filburt。这在第一次尝试时奏效了。我真的很感激。
【解决方案2】:

首先测试它是否有 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

【讨论】:

  • 非常感谢。以后我会保留检查价值的想法。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 2021-12-25
    相关资源
    最近更新 更多