2016-03-10 1 views
0

В Париже (часовой пояс Европа/Париж) изменение смещения часовой пояс на 2016-03-27 в 2:00 утра. Часовой пояс - в UTC + 1 и после UTC + 2.CONVERT_TZ не работает должным образом в зимнее/летнее время смены часов

Mysql функция CONVERT_TZ не работает, если вы даете время во время изменения: между 2016-03-27 2:00:01 и 2:59:59 2016-03-27

Пример:

SELECT CONVERT_TZ ('2016-03-27 02:18:29', 'Европа/Париж', "UTC") === '2016-03-27 01:00:00'

И смешно: SELECT CONVERT_TZ ('2016-03-27 01:00:00', 'UTC', 'Europe/Paris') === '2016-03-27 03:00:00'

Мне нужно преобразовать база данных sql с датой во многих часовых поясах к новой базе данных со всей датой непосредственно в часовом поясе UTC (безопасно), с этой проблемой некоторая дата будет неправильной :(

ответ

0

Учитывая «недействительное» местное время, функция MySQL CONVERT_TZ продвигает ее следующее правильное местное время перед его преобразованием. Так как ваше значение 2:18:29 действительно не происходит в эту дату в этом часовом поясе, оно переводится в 3:00:00 по местному времени, а затем правильно преобразуется в 1:00:00 UTC.

Осенью, когда DST заканчивается в Париже 30 октября 2016 года, произойдет 2:18:29дважды. Вы обнаружите, что функция MySQL CONVERT_TZ выбирает второй двух вхождений.

Такое поведение является последовательным и, следовательно, говорит, что оно не работает, является неправильным. Это работает, это просто не может быть поведение вы предпочли бы.

Лично я думаю, что весной было бы лучше пропустить до 3:18:39 (который преобразует в 1:18:29 UTC). Я также думаю, что осенью лучше использовать первый двух вхождений. Я думаю, что поведение вмещает большее количество реальных сценариев, но это только мое мнение.

Кроме того, почему у вас есть неверные данные в ваших данных? Если они записаны из реальных событий, время будет пропущено на часах и, таким образом, не окажется в вашей базе данных. Поэтому обычно приходится иметь дело с этим при расчете расчета времени, например, повторяющегося графика.

Что касается вашего второго примера, там нет ничего плохого. 1:00 UTC действительно будет 3:00 в Париже, когда смещение часового пояса - UTC + 2.

Смежные вопросы