2016-09-13 42 views
2

我有一個System.DateTime,它已經在特定的時區,但未指定DateTime.Kind以及代表IANA時區的字符串。我想將其轉換爲NodaTime.ZonedDateTime將System.DateTime轉換爲NodaTime.ZonedDateTime

例如:

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

我想ZonedDateTime表示2016年1月1日 - 芝加哥時間12PM。我該怎麼做呢?

回答

4

如果我理解正確的話,你想採取一個標準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 
+2

是的,這是對的 - 但你也可能認爲'AtStrictly'可能會或可能不會有你要找的行爲。很好地熟悉'AtLeniently'等其他選項以及自定義解析器,例如[我在此顯示的調度解析器](http://stackoverflow.com/a/25124701/634824)(這是新的寬鬆解析器在2.x中)。 –

相關問題