2013-08-16 4 views
18

Как я могу получитьMysql FROM_UNIXTIME, как UTC

FROM_UNIXTIME 

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

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

ответ

15

Вы бы лучше настройки часового пояса загодя:

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

Причина в том, что преобразования, связанные с местным часовым поясом, могут быть потерями. Существует пример этого в docs here (см четвёртую пункт в разделе UNIX_TIMESTAMP(), начиная с «Примечание:»)

+0

'SET time_zone = '+00: 00'' работал для меня. См. Mārtiņš Radiņš ответ, если вы хотите, чтобы он был сохранен. – lepe

12

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

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

если CONVERT_TZ возвращает нуль, убедитесь, что часовой пояс таблице MySQL заполнен:

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

Мне нравится безгражданства решения – Erbureth

+0

Какое большое решение :) –

+1

это без гражданства, но терпит неудачу с неоднозначной датами, поскольку conver_ttz не может знать смещение временной зоны временной метки источника. –

1

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

Если вы wan't ваш сервер для создания времени часовой пояс 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 Reference Manual :: 10.6 MySQL Server Time Zone Support

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