将System.DateTime转换为NodaTime.ZonedDateTime

Con*_*cer 6 c# nodatime

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

例如:

var original = new DateTime(2016, 1, 1, 12, 0, 0);
var timezone = "America/Chicago";
Run Code Online (Sandbox Code Playgroud)

我想要一个ZonedDateTime代表01/01/2016 - 芝加哥时间12点的节目.我该怎么做呢?

ste*_*kil 8

如果我理解正确,你想要DateTime一个已知时间的标准Chicago并得到ZonedDateTime代表这个日期+时间+时区,对吗?

如果是这样,我相信这样做会.从中间转换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
Run Code Online (Sandbox Code Playgroud)

  • 是的,这是对的 - 但您也可以认为"AtStrictly"可能会或可能不会有您正在寻找的行为.很高兴熟悉其他选项,如"AtLeniently",以及自定义解析器,如[我在此处显示的调度解析器](http://stackoverflow.com/a/25124701/634824),(这是新的宽松解析器)在2.x). (3认同)