我在数据库中有一个事件日志,事件的日期时间存储为UTC时间。在我的应用程序中,我使用NodaTime,我将值作为DateTime
,然后将其转换为Instant
:
var instant = NodaTime.Instant.FromDateTimeUtc(DateTime.SpecifyKind(eventDateTime, DateTimeKind.Utc));
现在我希望使用系统的时区获取与ZonedDateTime
对应的instant
。我知道我可以使用instant.InZone(systemTimeZone)
来获得我需要的ZonedDateTime
。但是,我不知道如何使用正确的值填充systemTimeZone
变量。如何获取与系统时区对应的DateTimeZone
对象?
答案 0 :(得分:6)
将IDateTimeZoneProvider.GetSystemDefault
用于您感兴趣的时区提供程序。例如:
var systemZone = DateTimeZoneProviders.Tzdb.GetSystemDefault();
var zonedDateTime = instant.InZone(systemZone);
或使用DateTimeZoneProviders.Bcl
使用相应的TimeZoneInfo
支持的时区。