And*_*nea 10 .net c# datetime type-conversion datetimeoffset
我需要将一些代码从静态调用升级DateTime.UtcNow到调用基本上返回的时间提供程序服务DateTimeOffset.UtcNow.要进一步转换此DateTimeOffset实例DateTime,有DateTime属性.另外,似乎有从隐式转换DateTimeOffset到DateTime.
我有点担心可能会出现一些我现在看不到的边缘情况,而这两种情况并不相同.在那儿?
如果你看看你的价值,DateTimeOffset.UtcNow.DateTime.Kind你会看到它是未指定的.框架将未指定的种类视为本地时间.这种类型DateTime.UtcNow是Utc,因此当时区转换应用于本地时区时会有所不同.
解决方法是使用DateTimeOffset.UtcNow.UtcDateTime具有指定的Utc类型的.
内部看起来像这样:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,看起来您最终可能会得到一个基于 UTC 的 DateTime,但随后会转换为Unspecified.