2016-09-13 5 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, который представляет 01/01/2016 - 12pm в Чикаго время. Как мне это сделать?

ответ

4

Если вы меня поняли правильно, вы хотите принять стандартное DateTime с известным временем в Chicago и получить ZonedDateTime, представляющий эту дату + время + часовой пояс, исправьте?

Если это так, я считаю, что это будет сделано. Промежуточное преобразование от DateTime до LocalDateTime может не понадобиться, если вы можете построить его напрямую.

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). –