Как NodaTime обрабатывает будущие даты, если наше правительство изменит время начала DLS?

Если я использую NodaTime для преобразования будущей даты и времени в UTC, он использует смещение этой будущей даты (как известно из глобальной базы данных смещений), что произойдет, если внезапно это будущее смещение для определенного часового пояса изменится из-за изменения правительства или Государственный референдум меняет это (как это может произойти в Квинсленде и ЮАР в Австралии)? Теперь все мои будущие свидания будут исключены из-за любых изменений, которые они произведут... Это кажется маловероятным, но это все же допустимый сценарий для размышлений...


person Brad Jeffery    schedule 20.11.2015    source источник
comment
Обычно подобные изменения необходимо отражать в новой версии программного обеспечения для хронометража. Другого пути действительно нет. Если у вас есть записанное будущее время, чувствительное к этим изменениям, вам придется не только обновиться до новой версии, но и, возможно, обновить свои данные.   -  person Numeron    schedule 20.11.2015
comment
@Numeron: обычно никаких изменений кода не требуется — только новые данные. Различные API делают это по-разному простым/сложным в обращении; в Noda Time у нас есть механизм для потребления новых данных, хотя мы работаем над тем, чтобы сделать его проще.   -  person Jon Skeet    schedule 20.11.2015


Ответы (1)


Во-первых, вам нужно будет обновить данные, чтобы узнать об изменении и получить соответствующий IDateTimeZoneProvider в вашем коде. Инструкции для этого приведены в руководстве пользователя, но мы надеемся, что в будущем это будет проще. Особенно:

  • Мы уже создаем и публикуем новые файлы данных, когда IANA публикует новую версию исходных данных.
  • Мы планируем создать пакет Nuget, который также можно будет обновлять при каждом новом выпуске исходных данных; это позволит пользователям, у которых есть регулярные развертывания, выбирать последнюю версию для каждой сборки, оставляя относительно небольшое временное окно, в течение которого она устаревает.
  • Мы можем предоставить вам строительные блоки для опроса и самообновления вашего приложения в той или иной форме.
  • Мы, скорее всего, будем размещать файлы на CDN, а не только на веб-сайте Noda Time, как сейчас.

Так что это вопрос получения новых данных. Другое дело, как вы его используете. Если вы сохранили UTC в своей базе данных, вы получите другое местное время, когда позже примените новые данные часового пояса к тем же временным меткам. Если это не то, что вы хотите, если ваше приложение имеет дело с пользователями, планирующими события по местному времени, тогда вы должны сохранять местное время и часовой пояс, чтобы изменение данных часового пояса означало изменение момента времени, когда событие происходит, а не изменение местного времени, в которое оно происходит. Конечно, вам нужно подумать о том, что произойдет, если кто-то запланировал событие на местное время, которое должно было состояться, но позже оказалось «пропущенным временем», когда часы скорректированы за его пределами. . Noda Time не может сделать этот выбор за вас, но позволяет достаточно легко выразить свое решение с помощью ZoneLocalMappingResolver делегат, возможно созданный или полученный с помощью класса Resolvers.

person Jon Skeet    schedule 20.11.2015