我需要将一段代码从静态调用DateTime.UtcNow
升级到调用时间提供程序服务,该服务基本上返回DateTimeOffset.UtcNow
。要将此DateTimeOffset
实例进一步转换为DateTime
,请使用DateTime
属性。或者,似乎存在从DateTimeOffset
到DateTime
的隐式转换。
我有点担心可能会出现一些我现在无法看到的边缘情况,而这两种情况并不相同。有吗?
答案 0 :(得分:5)
如果查看DateTimeOffset.UtcNow.DateTime.Kind
的值,您会看到它未指定。框架将未指定的种类视为本地时间。 DateTime.UtcNow
的种类是Utc,因此在本地时区应用时区转换时会有差异。
解决方法是使用指定了Utc类型的DateTimeOffset.UtcNow.UtcDateTime
。
答案 1 :(得分:4)
在内部看起来像这样:
<template id="cardSetFoo" is="dom-bind">
<template id="cardSet" is="dom-repeat" items="[[data]]" as="card">
<paper-card>
<div class="card-body">
<h4>[[card.title]]</h4>
[[card.text]]
</div>
</paper-card>
</template>
</template>
所以看起来你最终得到一个基于UTC的DateTime,然后转换为 public static DateTimeOffset UtcNow {
get {
return new DateTimeOffset(DateTime.UtcNow);
}
}
public DateTime DateTime {
get {
return ClockDateTime;
}
}
private DateTime ClockDateTime {
get {
return new DateTime((m_dateTime + Offset).Ticks, DateTimeKind.Unspecified);
}
}
public DateTime UtcDateTime {
[Pure]
get {
Contract.Ensures(Contract.Result<DateTime>().Kind == DateTimeKind.Utc);
return DateTime.SpecifyKind(m_dateTime, DateTimeKind.Utc);
}
}
。
答案 2 :(得分:1)
public static DateTimeOffset UtcNow {
get {
return new DateTimeOffset(DateTime.UtcNow);
}
}
所以,是的,看起来它等同于DateTime.UtcNow
。