Цитата сообщения #573075 пользователя infunx от 25.10.2014 17:30 | Да ладно :) Таймзоны обновляются на ходу же ж. | |
И все даты съедут на час назад.
Плюс период с 26.10 с 01-00 до 02-00 будет в ближайших судках дважды.
Вот специально нашел разжеванное объяснение:
26 октября 2014 года в 02:00 в большинстве регионов России состоится очередное изменение во времени: мы переходим на постоянное зимнее время (часы переводятся на час назад).
Если бы речь шла о наручных или настенных часах, то вся проблема свелась бы к ручному переводу стрелок. Так почему в компьютерах все сложно и требуются какие-то обновления? Или не требуются? Давайте разберемся.
Немного теории
В 2011 году по постановлению президента Медведева Россия перешла на постоянное летнее время, в результате чего Москва находится в часовом поясе GMT+4, а Екатеринбург в GMT+6. Что это за цифры? Вы наверняка знаете, что наш земной шар делится на условные временные зоны. Нулевой меридиан, проходящий через английский город Гринвич, имеет нулевую временную зону (GMT+0). Двигаясь на восток в сторону Японии временные зоны получают положительное смещение времени, то есть когда в Гринвиче полночь, в Москве 4 часа утра (GMT+4), а в Екатеринбурге 6 утра (GMT+6). Двигаясь от Гринвича на запад мы получаем отрицательное смещение времени, поэтому когда в Гринвиче полночь, в Нью-Йорке еще только 20 часов вечера предыдущего дня (GMT-4).
Большинство операционных систем для представления времени используют довольно простую схему: за начальную точку отсчета берется так называемое UNIX Epoch или 1 января 1970 года 00 часов по Гринвичу. Любое другое время внутри компьютера представлено в виде количества секунд, прошедшего с момента UNIX Epoch. Например, 23 октября 2014 года 00:00 по Гринвичу хранится как число 1414000800 - именно столько секунд прошло с момента UNIX Epoch. В итоге получается довольно простая арифметика: в сутках 24 часа, поэтому чтобы получить 00 часов 24 октября, нужно к 1414000800 прибавить 24*60*60=86400 секунд. Все просто, казалось бы. Но нет. Дело в том, что не в каждых сутках 24 часа. Поскольку 26 октября 2014 года мы должны перевести часы на час назад, между 00 часов 26 октября и 00 часов 27 октября в большинстве городов России всего 23 часа.
Для того, чтобы функции работы со временем могли учитывать переходы между летним и зимним временем, была разработана специальная база данных - timezone database (tzdata) или Olson database. В этой базе данных хранятся сведения о локальных переводах времени для различных территорий. Понятно, что между Гринвичем и GMT+6 всегда будет 6 часов разницы, но вот между Гринвичем и Екатеринбургом 25 октября 2014 года 6 часов разницы, а с 26 октября - 5 часов. То есть, 26 октября Екатеринбург "переезжает" из GMT+6 в GMT+5. Фактически же локальные временные зоны обозначаются не через смещение GMT, а имеют наименования типа Asia/Yekaterinburg или Europe/Moscow, поэтому правильнее для Екатеринбурга указывать временную зону именно так: Asia/Yekaterinburg.
Итак, теперь, когда вы освоили теорию, давайте ответим на вопрос: можно ли просто перевести часы в компьютере или на сервере. Возникает два варианта:
- Вы вручную меняете временную зону вашего сервера на GMT+5 (для Екатеринбурга). Тогда с 26 октября ваш сервер будет показывать правильное время. Но для всех предыдущих дат время будет смещено на час. Например, если у вас на сайте есть раздел с новостями и у вас в понедельник, 20 октября в 10 утра была опубликована какая-то новость, то после такого перевода часов эта новость будет отображаться как опубликованная в 9 утра. Почему? Вспомните что мы рассказывали по количество секунд, прошедшее с UNIX Epoch. Оно не изменилось, а вот смещение GMT стало другим. Является ли отображение времени у предыдущих дат для вас проблемой или нет - решать вам.
- Необходимо произвести обновление базы данных tzdata в вашей системе, чтобы в нем появилась запись о том, что правительство РФ решило перевести стрелки часов 26 октября 2014. Если это сделать, то тогда все временные отметки, сделанные как до 26 октября, так и после, будут иметь правильное время.