我有一个数据库,所有日期都是UTC,驱动程序总是发送给我的DateTime对象DateTimeKind.Unspecified.我想假设它们是UTC并转换为当地时间.
使用NodaTime实现这一目标的最简单方法是什么?
Instant.FromDateTimeUtc(utcDate).InZone(localZone); 继续抱怨DateTimeKind应该是Utc.
如果您肯定使用Noda Time并想要一个ZonedDateTime,您可以"告诉"Noda Time你真的有一个UTC值,然后转换它:
var zoned = LocalDateTime.FromDateTime(utcDate)
.InZoneStrictly(DateTimeZone.Utc)
.WithZone(localZone);
Run Code Online (Sandbox Code Playgroud)
或者您可以使用DateTime.SpecifyKind以下开头:
var utcDateTime = DateTime.SpecifyKind(unspecifiedDateTime, DateTimeKind.Utc);
Run Code Online (Sandbox Code Playgroud)
...然后使用您现有的代码,或者如果您愿意,可以将Noda Time完全取出.
事实上,DateTime.ToLocalTime()如果你在其他地方不需要Noda Time ,那就没关系了:
var localDateTime = utcDateTime.ToLocalTime();
Run Code Online (Sandbox Code Playgroud)
... 如果你打电话,BCL将假设未指定的日期/时间是 UTC ToLocalTime().当然,我建议尽量使用Noda Time :)
| 归档时间: |
|
| 查看次数: |
843 次 |
| 最近记录: |