24 января 2013

Отголоски медведевской реформы времени

Как все помнят ФЗ РФ от 03.06.2011. N 107-ФЗ "Об исчислении времени" и принятое на его основе Постановление Правительства РФ от 31.08.2011 N 725 "О составе территорий, образующих каждую часовую зону, и порядке исчисления времени в часовых зонах, а также о признании утратившими силу отдельных Постановлений Правительства Российской Федерации" установило, что московское время исчисляется в национальной шкале времени Российской Федерации UTC плюс 4 часа (+4 к Гринвичу), а переход на летнее время отменен.

Сколько это породило технических и не только проблем по всей стране представить сложно. Дело в том, что время используется в различных протоколах аутентификации (типа Kerberos). Если на одном из двух компьютеров установлено обновление, меняющее временную зону, а на другом нет, то все ломается, т.к. их время отличается на час.

Казалось бы все проблемы позади, все патчи установлены. Но буквально недавно столкнулись, с тем, что наше Web-приложение странно себя ведет в Chrome на Android. Выяснилось, что в Гугл почему-то решили, что для Хрома на Андроиде надо помнить о "Великой реформе" и привязать зону к дате. А точнее даже не зону, а наличие признака летнего времени. Получилось, что при создании объекта Date в JavaScript летом 2010 временная зона получается +5. Почему +5? Видимо потому, что берется зона на текущую дату и к ней применяется признак летнего времени, действующий в 2010 (еще смещение +1). Очевидно в Гугле не дооценили масштаб реформы, которая на самом деле сделал две вещи: 1 - отменила летнее время, 2 - изменила временную зону.

Демонстрация:
> new Date(2013,7,1)
Thu Aug 01 2013 00:00:00 GMT+0400 (MSK)
> new Date(2010,7,1)
Sun Aug 01 2010 00:00:00 GMT+0500 (MSD)

В Хроме на Windows такого не наблюдается.

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

UPDATE 2014-07-23: ну вот, веселье продолжается, зоны сдвигают на -1 час - http://pravo.gov.ru:8080/page.aspx?111660