如何将可为空的 DateTime 转换为 UTC DateTime

How to cast a nullable DateTime to UTC DateTime

我正在读回日期时间?我认为的价值。现在我检查一下 NextUpdate DateTime? HasValue 如果是,则将该时间转换为 UTC

从阅读这篇文章看来我需要使用 null coalescing operator 但我的作业告诉我 System.NUllable 在使用该运算符时不包含 ToUniversalTime() 的定义。

我在 SO 上搜索了一个类似的问题,但没有成功。

问题:

如何将空 DateTime 值转换为 UTC?

代码:

我只是在检查日期时间?有一个值,如果有,则将该 DateTie 转换为 UTC -

            if (escalation.NextUpdate.HasValue)
            { 
                escalation.NextUpdate = escalation.NextUpdate ?? escalation.NextUpdate.ToUniversalTime(); 
            }
            else
            {
                escalation.NextUpdate = null;
            }

我的NextUpdate属性中的模型:

    public DateTime? NextUpdate { get; set; }

如果您使用的是 c#6,那么它非常简单

escalation.NextUpdate?.ToUniversalTime();

这就好像 NextUpdate 不是 null 调用 ToUniversalTime() else return null

如果您不能使用 c#6,那么内联 if 可能是您最好的选择

escalation.NextUpdate.HasValue ? (DateTime?)escalation.NextUpdate.Value.ToUniversalTime():null;

如果您错过了可为空的值 属性 并更正了您对 ?? 的使用,这与您的完整内容基本相同。运算符

您的代码有不止一处错误。

??运算符returns左边如果不为空,否则右边.
由于您已经检查过 escalation.NextUpdate.HasValuetrue,左侧不是 null 并且您再次分配相同的日期(没有转换为 UTC)。

Nullable<DateTime> 未声明 [​​=17=],您需要对值进行声明。

所以最终的代码应该是这样的:

if (escalation.NextUpdate.HasValue)
    escalation.NextUpdate = escalation.NextUpdate.Value.ToUniversalTime(); 

或使用 C#6

escalation.NextUpdate = escalation.NextUpdate?.ToUniversalTime();

不需要 else 分支,因为在那种情况下它会是 null