Я знаю, что DateTimeOffset хранит дату/время UTC и смещение. Я также знаю из эту запись в блоге MSDN, что DateTimeOffset следует использовать для "Работа с летними днями".
То, что я пытаюсь понять, точно так же, как DateTimeOffset "работает с летним временем". Мое понимание, мало того, что есть, заключается в том, что переход на летнее время является политическим решением и не может быть выведен из чисто смещения. Как может быть, что эта структура дружелюбна к DST, если она хранит только смещение?
Я собираюсь использовать способ TimeZoneInfo в сочетании с DateTimeOffset. Как мне это сделать?
Наконец, есть ли какие-нибудь лучшие способы, которыми я мог бы достичь следующего?
(Я видел несколько сообщений от Jon Skeet о Noda-Time, но я не знаю, пока это готово, но я не знаю если он будет хорошо интегрироваться в наше существующее решение).
Вот наш сценарий. Сервер для неудачных унаследованных причин работает в Великобритании. У нас есть клиенты, которые начинают входить в поток из Австралии с несколькими часовыми поясами. Другие страны могут входить в строй в любое время.
У нас есть планировщик, основанный на планировщик жестких дисков (использует DateTimeOffset). Он работает очень хорошо. Однако в нашей базе данных мы сохраняем достаточно данных для создания объекта DateTime (см. Ниже), а в нашем подклассе и сантехническом коде мы просто используем DateTime, поскольку первоначально мы поддерживали только пользователей из Великобритании.
Этот планировщик отвечает за иммобилизацию и мобилизацию оборудования завода. Поэтому жизненно важно, чтобы запланированные события выполнялись в локальном времени, настроенном пользователем DST.
Пользователь вводит расписание на нашем веб-сайте; в настоящее время он хранится в базе данных как день недели, час и минута. Когда данные считываются, мы создаем объект DateTime для следующего появления этого дня, часа и минуты. Я могу изменить структуру db, чтобы дополнительно сохранить смещение или часовой пояс.
При достижении этой даты и времени планировщик отправляет команду (и повторяет попытку некоторое время). Затем он запускается снова в один и тот же день и на следующей неделе (хотя служба фактически будет переработана к тому времени, и код снова запустится).
ВСЕ, что мне нужно достичь, - это запуск запланированных событий в локальную дату и время, заданные часовым поясом для этого пользователя, с использованием планировщика, который подклассы из Hardcodet. Если DateTimeOffset действительно поддерживает DST, может быть, все, что мне нужно сделать, это сохранить смещение и изменить наш сантехнический код, чтобы использовать эту структуру, но у меня создается впечатление, что это не так просто. (Мы можем получить текущий часовой пояс с позиции GPS установки, но это обсуждение в течение другого дня:)).