Целью является создание функции, которая преобразует время из одного часового пояса в другое, используя Nodatime. Я не просто ищу отзыв о том, корректен ли результат, но обратная связь, специфичная для «как» я делаю это (действительно ли это правильно или есть тонкие дыры).Это правильный способ конвертировать между часовыми поясами в Nodatime?
Вот функция:
static ZonedDateTime ConvertDateTimeToDifferentTimeZone(DateTime p_from_datetime, string p_from_zone, string p_to_zone)
{
DateTimeZone from_zone = DateTimeZoneProviders.Tzdb[p_from_zone];
LocalDateTime from_local = new LocalDateTime(p_from_datetime.Year, p_from_datetime.Month, p_from_datetime.Day, p_from_datetime.Hour, p_from_datetime.Minute);
ZonedDateTime from_datetime = from_zone.AtStrictly(from_local);
var from_instant = from_datetime.ToInstant();
DateTimeZone to_zone = DateTimeZoneProviders.Tzdb[p_to_zone];
ZonedDateTime to_datetime = to_zone.AtStrictly(from_local);
var to_offset_datetime = from_instant.WithOffset(to_datetime.Offset);
return to_zone.AtStrictly(to_offset_datetime.LocalDateTime);
}
Путь я бы назвал это выглядит следующим образом:
DateTime from_datetime = new DateTime(2016, 10, 15, 16, 30, 0);
string from_zone = "US/Central";
string to_zone = "US/Eastern";
var x = ConvertDateTimeToDifferentTimeZone(from_datetime, from_zone, to_zone);
Console.WriteLine(from_datetime.ToString() + " (" + from_zone + ") = " + " (" + x.ToString() + " (" + to_zone + ")");
Я пропускаю что-нибудь или делать что-нибудь неправильно?
Спасибо за ваши комментарии и инструкцию Jon. Основой этого является приложение для календаря. Конкретная цель заключается в том, чтобы владелец события мог ввести дату и время вместе с часовым поясом для конкретного события календаря. В идеале это будет единственная информация, которая будет сохранена, хотя у меня нет проблемы с сохранением смещения, если это упростит ситуацию. С другой стороны, получатель/потребитель-получатель событий сможет видеть точную дату и время в выбранном им часовом поясе (возможно, извлеченные из настроек браузера или их желаемого часового пояса). – CINCHAPPS
@TomWesson: Нужно выработать то, что вы хотите сделать, если они предоставляют дату/время, которое не существует или происходит дважды из-за изменений DST. Возможно, 'InZoneLeniently' делает то, что вы хотите, но вы shoudl принимаете это решение явно. (Хранение смещения также позволит вам рассогласовать.) –
Вы быстро Джон, я сделал изменение к моему комментарию выше. – CINCHAPPS