使用NodaTime,如何将Instant转换为相应系统的ZonedDateTime?

时间:2013-12-27 21:03:38

标签: c# .net nodatime

我在数据库中有一个事件日志,事件的日期时间存储为UTC时间。在我的应用程序中,我使用NodaTime,我将值作为DateTime,然后将其转换为Instant

var instant = NodaTime.Instant.FromDateTimeUtc(DateTime.SpecifyKind(eventDateTime, DateTimeKind.Utc));

现在我希望使用系统的时区获取与ZonedDateTime对应的instant。我知道我可以使用instant.InZone(systemTimeZone)来获得我需要的ZonedDateTime。但是,我不知道如何使用正确的值填充systemTimeZone变量。如何获取与系统时区对应的DateTimeZone对象?

1 个答案:

答案 0 :(得分:6)

IDateTimeZoneProvider.GetSystemDefault用于您感兴趣的时区提供程序。例如:

var systemZone = DateTimeZoneProviders.Tzdb.GetSystemDefault();
var zonedDateTime = instant.InZone(systemZone);

或使用DateTimeZoneProviders.Bcl使用相应的TimeZoneInfo支持的时区。