mysql CONVERT_TZ противоречивое поведение - PullRequest
0 голосов
/ 25 апреля 2018

Следующее поведение меня озадачивает. Мой сервер MySQL установлен на ПК с часовым поясом EEST. Я хочу преобразовать дату и время в mysql в дату UTC.

При выполнении

select CONVERT_TZ('1970-01-01 02:00:01', 'SYSTEM', '+00:00')

ответ: '1970-01-01 00: 00: 01'

Аналогично, при выполнении

select CONVERT_TZ('1970-01-01 04:00:00', 'SYSTEM', '+00:00')

ответ: «1970-01-01 02: 00: 00»

Тем не менее, когда я в основном хочу 0 Unix-время, выполнив

select CONVERT_TZ('1970-01-01 02:00:00', 'SYSTEM', '+00:00')

Ответ снова: «1970-01-01 02: 00: 00»

Почему это? Я делаю что-то неправильно? Как я могу получить правильное значение «1970-01-01 00:00:00»?

1 Ответ

0 голосов
/ 25 апреля 2018

Я думаю, что проблема здесь заключается в том, что корректировка, сделанная в CONVERT_TZ, которая привела бы к отметке времени во время или до , начало эпохи UNIX будет проигнорировано, и будет возвращена исходная временная метка ввода,Рассмотрим следующие три запроса:

SELECT CONVERT_TZ('1970-01-01 01:00:01', 'SYSTEM', '+00:00');
-- '1970-01-01 00:00:01'
SELECT CONVERT_TZ('1970-01-01 01:00:00', 'SYSTEM', '+00:00');
-- '1970-01-01 01:00:00'
SELECT CONVERT_TZ('1970-01-01 00:30:00', 'SYSTEM', '+00:00');
-- '1970-01-01 00:30:00'

Только первый запрос корректирует метку времени;вторые два просто возвращают ввод.

Из превосходных комментариев, данных @Thomas выше, я извлек следующее из документации MySQL для CONVERT_TZ:

Если значение выходит за пределы поддерживаемого диапазона типа TIMESTAMP при преобразовании из from_tz в UTC, преобразование не выполняется.

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