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

时间:2016-06-02 10:30:48

标签: c# datetime model-view-controller nullable null-coalescing-operator

我正在读回DateTime?从我看来的价值。现在我查看是否json.loads DateTime? NextUpdate如果是,请将该时间转换为HasValue

从阅读本文来看,似乎我需要使用UTC,但我的作业告诉我,使用该运算符时,System.NUllable不包含null coalescing operator的定义。

我在SO上搜索过类似的问题,但没有运气。

问题:

如何将null DateTime值转换为UTC?

代码:

我只是在检查DateTime?有一个值,如果是这样,将DateTie转换为UTC -

ToUniversalTime()

模型中的 if (escalation.NextUpdate.HasValue) { escalation.NextUpdate = escalation.NextUpdate ?? escalation.NextUpdate.ToUniversalTime(); } else { escalation.NextUpdate = null; } 属性:

NextUpdate

2 个答案:

答案 0 :(得分:10)

您的代码错误的方式不止一种。

??运算符如果非空则返回左侧,否则返回右侧。 由于您已选中escalation.NextUpdate.HasValuetrue,因此左侧不是null,您再次指定相同的日期(不转换为UTC)。

Nullable<DateTime>未声明ToUniversalTime(),您需要对该值执行此操作。

所以最终的代码应如下所示:

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

或使用C#6

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

不需要else分支,因为在这种情况下它仍然是null

答案 1 :(得分:5)

如果您使用的是c#6,则非常简单

<div id="animations">
  <div class="clouds cloud-1"></div>
  <div class="clouds cloud-2"></div>
  <div class="clouds cloud-3"></div>
  <div class="clouds cloud-4"></div>
  <div class="clouds cloud-5"></div>
  <div class="clouds cloud-6"></div>
  <div class="clouds cloud-7"></div>
  <div class="clouds cloud-8"></div>
  <div class="clouds cloud-9"></div>
  <div class="clouds cloud-10"></div>
  <div class="clouds cloud-11"></div>
  <div class="clouds cloud-12"></div>
  <div class="clouds cloud-13"></div>
</div>

这转换为好像NextUpdate不为null调用ToUniversalTime()else返回null

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

escalation.NextUpdate?.ToUniversalTime();

这基本上与你的完全一样,如果你错过了你可以错过了可空的Value属性并且纠正你使用的?操作