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?
,如果 creationTime
是 null
,则将是 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";
}
}
}
如何计算可为空的 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?
,如果 creationTime
是 null
,则将是 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";
}
}
}