Почему localtime () устанавливает флаг tm_isdst на 1 час, когда заканчивается летнее время и время откатывается на один час - PullRequest
2 голосов
/ 17 февраля 2011

У меня настроена система в московском часовом поясе. Москва переходит на летнее время в последнее воскресенье марта каждого года. Московское летнее время (MSD) - UTC + 4 часа. В последнее воскресенье октября летнее время заканчивается и возвращается к московскому стандартному времени (MSK), которое составляет UTC +3 часа.

Переход от MSD к MSK происходит в последнее воскресенье октября в 3 часа ночи. К 3 часам утра часы снова сбрасываются на 2 часа ночи. Таким образом, в последнее воскресенье октября будет два случая в 2 часа ночи. В первый раз в 2 часа ночи Москва все еще находится в MSD (UTC + 4). Во втором случае в 2 часа ночи Москва находится в МСК (UTC +3).

Мой запрос: если я использую функцию localtime () для получения информации о местном часовом поясе во втором экземпляре 2 часа ночи в последнее воскресенье октября, будет ли флаг tm_isdst установлен функцией localtime () или он не будет установлен , Мое наблюдение состоит в том, что флаг tm_isdst устанавливается функцией localtime () в течение одного часа в 2:00 - 3:00 (второй экземпляр) в MSK. Это ошибка или ожидаемое поведение?

Что касается записей, мой файл базы данных tz для часового пояса и Европы обновлен, и соответствующий файл базы данных часового пояса правильно скомпилирован компилятором zic как /usr/share/zoneinfo/Europe/Moscow.

1 Ответ

0 голосов
/ 17 февраля 2011

Из небольшого исследования спецификаций видно, что C определяет всю эту информацию из переменных среды. В этом случае переменная окружения TZ указана для POSIX. Windows хранит его в реестре. В течение этого 1-часового периода вы явно больше не переходите на летнее время, поэтому по определению флага tm_isdst это должно быть ясно.

Чтобы узнать, является ли это ошибкой в ​​реализации компилятора / библиотеки или ОС, вам придется проверить значение переменной среды непосредственно в течение этого периода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...