Mysql FROM_UNIXTIME как UTC

Как я могу получить

FROM_UNIXTIME

как UTC/GMT в mysql? Дата возвращается в часовом поясе соединения.

Я не хочу изменять часовой пояс соединения.

Ответы

Ответ 1

Вам лучше настроить часовую зону раньше времени:

SET time_zone='UTC';
select FROM_UNIXTIME(1277942400);

Причина в том, что конверсии с локальным часовым поясом могут быть потерями. Ниже приведен пример этого в документах (см. Четвертый абзац в разделе UNIX_TIMESTAMP(), начиная с "Примечание:" )

Ответ 2

Мое решение было

SELECT CONVERT_TZ(FROM_UNIXTIME(1277942400), @@session.time_zone,'UTC')

если CONVERT_TZ возвращает значение null, убедитесь, что таблица часовых поясов mysql заполнена:

zypper install mysql-community-server-tools
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

Ответ 3

Я знаю, что это ответ, но все же я хотел бы внести свой вклад:

Если вы не хотите, чтобы ваш сервер производил время часовой пояс UTC с такими функциями, как NOW() и FROM_UNIXTIME() и т.д., вам нужно установить time_zone, как @Matt Johnson.

В этой статье он не упомянул: SET time_zone = timezone; устанавливает часовой пояс только для текущего соединения. Используйте SET GLOBAL time_zone = '+00:00', если вы хотите, чтобы эти функции возвращали/конвертировали ваши даты в UTC по умолчанию, поэтому вам не нужно было устанавливать часовой пояс каждый раз, когда вы хотите сохранить некоторые даты в формате UTC.

Проверьте текущие настройки time_zone: SELECT @@global.time_zone, @@session.time_zone;

Справочное руководство MySQL:: MySQL 5.5:: 10.6 Поддержка часового пояса сервера MySQL