将System.DateTime转换为NodaTime.ZonedDateTime

时间:2016-09-13 17:16:08

标签: c# nodatime

我有System.DateTime已经在特定时区但未指定DateTime.Kind,以及表示IANA时区的字符串。我想将其转换为NodaTime.ZonedDateTime

例如:

var original = new DateTime(2016, 1, 1, 12, 0, 0);
var timezone = "America/Chicago";

我想要一个ZonedDateTime代表芝加哥时间01/01/2016 - 12PM。我该怎么做?

1 个答案:

答案 0 :(得分:8)

如果我理解正确,您希望在DateTime中使用已知时间的标准Chicago并获得代表此日期+时间+时区的ZonedDateTime,是否正确?< / p>

如果是这样,我相信这样做会。如果您可以直接构建,则可能不需要从DateTimeLocalDateTime的中间转换。

var dotNetDateTime = new DateTime(2016, 1, 1, 12, 0, 0);
var localDate = LocalDateTime.FromDateTime(dotNetDateTime);
var chicagoTime = DateTimeZoneProviders.Tzdb["America/Chicago"];
var chicagoZonedDateTime = chicagoTime.AtStrictly(localDate); // Will contain 2016 01 01 noon

// now you can convert to time in Los Angeles
var laTime = DateTimeZoneProviders.Tzdb["America/Los_Angeles"];
var laZonedDateTime = chicagoZonedDateTime.WithZone(laTime); // will contain 2016 01 01 10am