Отмена Перехода На «Зимнее» Время

В связи с отменой перехода на «зимнее» время компании-разработчики задают нам вопросы, связанные с возможными проблемами, которые могут возникнуть при корректной работе приложений.

Чтобы ответить на эти вопросы, мы подготовили данный материал, в котором собраны советы по правильному использованию функций даты/времени, проверке кода на предмет потенциальных проблем, а также описаны шаги, которые необходимо предпринять для корректного развертывания обновлений как в операционной системе, так и в ней.

и сами приложения.

.

Ниже мы рассмотрим следующие темы:

  • Подходы к тестированию приложений и проверке кода
  • Рекомендации по корректной работе с датой/временем
  • Подходы к поиску обновлений операционной системы
  • Поездки для обновления приложений
  • Дополнительные материалы


Введение

Летом этого года Правительство РФ приняло закон, отменяющий сезонный перевод часов и установивший соответствующие часовые пояса и значения времени.

«Летнее» и «зимнее» время, также называемое «сезонным временем» или «летним временем» (DST — Daylight Saving Time) — это режим исчисления времени, при котором часы переводятся на один час вперед весной и на один час назад осень.

Весенние и осенние переходы различаются в Северном и Южном полушариях.

Переход на «летнее» время в Северном полушарии обычно начинается в марте или апреле (в зависимости от страны и континента), а переход на «зимнее» время происходит в октябре или ноябре.

В Южном полушарии все наоборот — «летнее» время начинается в октябре, а «зимнее» — в марте или апреле.

Обратите внимание, что переход на «летнее» и «зимнее» время происходит не во всех странах.



Тестирование приложений и проверка кода

Первым шагом в подготовке к прекращению летнего времени является установка соответствующего обновления операционной системы, которое доступно по адресу http://support.microsoft.com/kb/2570791 .

Далее необходимо убедиться, что приложение корректно работает с новыми настройками часового пояса и отключенными настройками перехода на «зимнее» и «летнее» время.

Для этого рекомендуется написать тестовый скрипт и сравнить результаты работы приложения на компьютере, где обновление еще не установлено, и на компьютере с установленным обновлением.

При обнаружении проблем рекомендуется проверить код приложения, обращая внимание на следующие функциональные блоки:

  • Получение или вычисление даты/времени
  • Использование собственных алгоритмов проверки часового пояса, перехода на «зимнее» и «летнее» время.

  • Собственные расчеты временных диапазонов, например разница дат в часах, минутах и секундах.

  • Расчеты, связанные с компенсацией перехода на «зимнее» и «летнее» время
  • Преобразование представления даты/времени для хранения или отображения
Приведенные ниже рекомендации помогут минимизировать эффект от отмены перехода на «зимнее» время и в целом улучшить работу с датой/временем в приложениях.

  • При установке обновлений обратите внимание на то, чтобы обновления выполнялись последовательно, желательно последовательно, одно за другим.

  • Используйте дату/время, хранящиеся в формате UTC (Всемирное координированное время, заменяющее «устаревшее» среднее время по Гринвичу, GMT).

    В этом представлении аккуратно отображаются исторические данные.

    В большинстве случаев проблемы возникают с преобразованием в местное представление, поскольку в этом случае требуется информация о часовом поясе и летнем времени.

    Эту информацию можно получить из различных источников:

  • При реализации связи между компьютерами, которая включает обмен датой/временем, она должна осуществляться в формате UTC — это дает обоим компьютерам одинаковую контекстную информацию для UTC.
Ниже приведены некоторые сценарии использования функций даты и времени, которые можно использовать для преобразования даты и времени в локальное представление.



Преобразование даты/времени в местное представление

В операционной системе Microsoft Windows имеется ряд программных интерфейсов, которые можно использовать для преобразования времени UTC в представление местного времени.

  • Функции ПолучитьСистемноеВремя() И ПолучитьСистемтимеасфилетиме() время возврата в формате UTC в такой структуре, как СИСТЕМНОЕ ВРЕМЯ или ВРЕМЯ ФАЙЛА
  • Функция ПолучитьЛокальноеВремя() возвращает текущее местное время в структуре типа СИСТЕМНОЕ ВРЕМЯ
  • Функция ПолучитьTimeZoneInformation() возвращает структуру ВРЕМЯ _ ЗОНА _ ИНФОРМАЦИЯ , описывающий текущий часовой пояс и настройки летнего времени на компьютере.

  • Функции Системтимиметофилетиме () И филетиметосистемтиме () используется для преобразования данных в структуры типа SYSTEMTIME или ВРЕМЯ ФАЙЛА
  • Функции Филетиметолокалфилетиме () И Локалфилетиметофилетиме () трансформировать структуру ВРЕМЯ ФАЙЛА между UTC и местным временем с учетом настроек летнего времени
  • Функции Системтимиметотзспецификлокалтиме () И ТзСпецификтиметосистемтиме () преобразовать дату/время UTC в структуре SYSTEMTIME в локальную структуру СИСТЕМНОЕ ВРЕМЯ .

    Эти функции используют структуру ВРЕМЯ _ ЗОНА _ ИНФОРМАЦИЯ , который описывает дату начала и окончания летнего времени.

Начиная с операционной системы Microsoft Windows Vista была введена концепция «динамических часовых поясов» — поддержка часовых поясов с датами начала/окончания летнего времени, которые «плавают» из года в год. Правила определения даты начала/окончания хранятся в реестре (см.

ниже) и их можно получить через функцию GetDynamicTimeZoneInformation () , который заполняет структуру ДИНАМИЧЕСКИЙ _ ВРЕМЯ _ ЗОНА _ ИНФОРМАЦИЯ .



Использование .

NET Framework

В .

NET Framework есть классы для преобразования даты и времени, в том числе классы ДатаВремя , Часовой пояс , Промежуток времени И ДатаВремяВид .

Эти классы используют функции Windows API, перечисленные выше.

Помимо этих функций, в .

NET Framework есть функции для изменения даты/времени за указанный период — Добавить часы () , Добавитьминуты () , Добавитьсекунды () , которые реализованы в классе ДатаВремя .



Информация о часовом поясе

Как мы отмечали выше, информация о часовых поясах хранится в реестре.

Описания всех часовых поясов можно найти в следующей ветке реестра: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones Каждый часовой пояс имеет свой уникальный элемент, вложенные элементы которого содержат такие атрибуты, как официальное название часового пояса, формальное название, а также ссылки на многоязычные ресурсы и информацию о самом часовом поясе.

Подэлемент Dynamic DST содержит информацию о предыдущих изменениях часового пояса.

Начиная с операционной системы Windows Vista, эта информация заполняется при установке операционной системы.

Для операционных систем Windows XP и Windows Server 2003 информация заполняется при установке соответствующих пакетов обновлений.

Информация о текущем часовом поясе, выбранном на панели Дата и Время также хранится в реестре в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation

Подходы к обновлению приложений

Компании, разрабатывающие программные продукты, должны после установки обновления проверить корректность работы своих приложений ( http://support.microsoft.com/kb/2570791 ), что отменяет автоматическое переключение Windows в режим зимнего времени.

Процесс проверки описан выше.

При необходимости компаниям следует выпустить обновления своих продуктов, которые позволят им корректно работать с датами/временем после 30.10.2011.

Поиск установленных обновлений

Для корректной установки обновлений для ваших продуктов необходимо убедиться, что установлено само обновление операционной системы (KB2570791), т.к.

не у всех пользователей включен Центр обновления Windows и обновления операционной системы устанавливаются по мере их появления.

Ниже приведены несколько способов проверить, установлено ли обновление операционной системы (KB2570791).



Ручные методы
Чтобы определить, установлено ли обновление операционной системы (KB2570791), вы можете использовать раздел Окна Обновлять В Контроль Панель .

Для этого выполните следующую последовательность действий:

  • Вызов меню Начинать
  • Вызов утилиты Панель управления
  • Перейти в раздел Программы\Программы и компоненты\Установленные обновления
  • Найдите пункт в списке установленных обновлений Обновлять для Майкрософт Окна ( КБ2570791) с датой 24.08.2011
Вы также можете использовать PowerShell, чтобы определить, установлено ли обновление операционной системы (KB2570791).

Чтобы найти интересующее нас обновление операционной системы, воспользуйтесь стандартным командлетом получать- исправление следующим образом: PS C:\> get-hotfix KB2570791 Информация об установленных обновлениях также доступна через единый интерфейс управления операционной системой — Windows Management Instrumentation (WMI).

Это можно сделать вручную с помощью утилиты консоли управления Windows (WMIC).

Чтобы получить список всех установленных обновлений, запустите команду wmic qfe list, а чтобы найти конкретное обновление операционной системы, выполните команду wmic qfe | найди "2570791"

Программные методы
Программные методы включают поиск в реестре, использование уже упомянутого Единого интерфейса управления операционной системой (WMI) и использование программных интерфейсов Центра обновления Windows. Не рекомендуется использовать поиск по реестру, так как в разных версиях операционной системы информация хранится в разных ветках реестра, например, в последних версиях Windows используется раздел «Обновление на основе компонентов».

Программные интерфейсы Центра обновления Windows довольно сложны и их следует использовать в тех случаях, когда другие методы не подходят. Самый простой способ программного обнаружения факта установки обновления операционной системы — интерфейс WMI. Чтобы найти все установленные обновления, необходимо выполнить запрос выберите * из Win32_QuickFixEngineering и, чтобы найти конкретное обновление, выполните запрос select * из Win32_QuickFixEngineering, где HotFixID="KB2570791" Далее, если установлено обновление операционной системы, устанавливается обновление программного продукта компании-разработчика.

Если вам необходимо установить обновление операционной системы, это можно сделать одним из следующих способов:

  • Программно, с помощью функций API обслуживания на основе компонентов.

  • Одновременно с установкой обновления приложения – в этом случае все варианты обновления операционной системы должны распространяться на диск вместе с обновляемым приложением.

  • Вручную, через Центр обновления Windows – каждый пользователь должен самостоятельно установить обновления операционной системы перед установкой обновленной версии приложения.

  • Если механизм Windows Update не используется, обновления можно установить вручную, скачав их по ссылке — http://support.microsoft.com/kb/2570791 выбрав нужную версию операционной системы


Дополнительная информация

  • Центр справки и поддержки летнего времени
  • Функции для работы с датой и временем — Windows API
  • Структуры для работы с датой и временем — Windows API
  • Использование классов .

    NET Framework

  • Описание инструментария управления Windows
  • API-интерфейсы обслуживания на основе компонентов
/АФ Теги: #зимнее и летнее время
Вместе с данным постом часто просматривают: