Изменило ли правило перехода на летнее время библиотеку времени выполнения C?
Вопрос
Некоторое время назад я собрал библиотеку на основе времени , которую можно было бы использовать для определения относительного времени в течение года для кого-то. В то время я отметил, что для перехода на летнее время он сдвинулся на один час в обоих направлениях. Мне просто пришло в голову, что Конгресс изменил правила перехода на летнее время . Я не помню, чтобы видел какую-либо информацию об обновлениях, чтобы решить изменение в алгоритмах. У кого-нибудь есть информация по этой теме?
Решение
Большинство Unix-подобных систем используют базу данных Olson tz для получения информации о часовом поясе:
http://www.twinsun.com/tz/tz-link.htm р>
Изменения в правилах часовых поясов США были реализованы в версии 2005l базы данных tz.
Другие советы
Для Visual Studio 2005 и более ранних версий Microsoft выпустила обновленные версии библиотек времени выполнения C. Дополнительную информацию можно найти здесь .
На какой платформе вы работаете?
Поскольку Конгресс не устанавливает правила для всего мира :), существует механизм для гибкого определения правил для Unix / Linux в течение длительного времени
См., например, http://www.manpagez.com/man/8 / zic / для формата файлов. Ваша конкретная система может нуждаться в обновленном определении новых правил (если дистрибутив еще не рассматривал его)
Для Windows MS встраивает некоторые правила и выпускает обновления, когда все меняется.
Для MacOs я понятия не имею, но я предполагаю, что он наследует способ работы Unix.
Но во всех этих случаях не нужно вносить изменения в библиотеку C
Что касается более общего замечания, среда выполнения C использует внутренние файлы данных для сопоставления внутреннего представления времени с языковым стандартом пользователя. Эти сопоставления регулярно обновляются соответствующими поставщиками в соответствии с действующим законодательством.
Поскольку внутренние часы должны быть установлены в UTC, переход на летнее время - это просто изменение часового пояса. Например, в моей стране 26 октября мой Mac переключился с CEST (центральноевропейское летнее время) на «нормальный» CET (центральноевропейское время). Изменился дисплей моих часов, но не время компьютера.
http://www.timeanddate.com/library/abbreviations /timezones/eu/cest.html р>
Действительно, это означает, что вам абсолютно необходимо хранить переменные даты и времени либо в формате UTC, либо в собственном формате, который учитывает часовой пояс. Вот почему просто записывайте дату и время как "ГГГГММДДЧЧММСС" строка - ошибка, ожидающая появления.