我有一个数据库,其中所有日期都是UTC,并且驱动程序总是向DateTime
个DateTimeKind.Unspecified
对象发送Instant.FromDateTimeUtc(utcDate).InZone(localZone);
个对象。我想假设它们是UTC并转换为当地时间。
使用NodaTime实现此目的的最简单方法是什么?
$url_parts
一直在抱怨DateTimeKind应该是Utc。
答案 0 :(得分:5)
如果您肯定使用Noda Time并想要ZonedDateTime
,您可以“告诉”Noda Time您确实获得了UTC值,然后转换它:
var zoned = LocalDateTime.FromDateTime(utcDate)
.InZoneStrictly(DateTimeZone.Utc)
.WithZone(localZone);
或者您可以使用DateTime.SpecifyKind
开头:
var utcDateTime = DateTime.SpecifyKind(unspecifiedDateTime, DateTimeKind.Utc);
...然后使用您现有的代码,或者如果您愿意,可以将Noda Time完全从图片中删除。
事实上,如果您不需要在其他地方使用Noda Time,那么只需DateTime.ToLocalTime()
即可。
var localDateTime = utcDateTime.ToLocalTime();
...如果您在其上调用ToLocalTime()
,BCL将假定未指定的日期/时间是 UTC。当然,我建议在任何地方使用Noda Time:)
答案 1 :(得分:0)
Instant now = SystemClock.Instance.GetCurrentInstant();
DateTimeZone TimeZone = DateTimeZoneProviders.Tzdb.GetSystemDefault();
var zoned = LocalDateTime.FromDateTime(msg.MessageSentUtc)
.InZoneStrictly(DateTimeZone.Utc)
.WithZone(TimeZone);
简体...