Запрос MySQL для текущего времени GMT

это звучит достаточно просто, но я не смог понять, как использовать простой оператор SELECT для возврата текущего времени в GMT.

Я пытался использовать CONVERT_TZ () преобразовать NOW () в GMT на основе часового пояса сервера и часового пояса GMT, но по какой-то причине он возвращает NULL, когда я помещаю в текстовые часовые пояса. Единственный способ получить результат-на самом деле поставить смещения, которые становятся слишком сложными для того, что должно быть действительно простая операция. Вот что я имею в виду:

mysql> SELECT CONVERT_TZ(NOW(),@@global.system_time_zone,'GMT');
NULL

mysql> SELECT CONVERT_TZ(NOW(),'PST','GMT');
NULL

mysql> SELECT CONVERT_TZ(NOW(),'-08:00','+00:00');
2010-02-13 18:28:22

все, что мне нужно, это простой запрос для возврата текущего времени в GMT. Заранее спасибо за помощь!

10 ответов


просто используйте UTC (не влияет на летнее время)

SELECT UTC_TIMESTAMP();

старый контент для справки:

это должно работать, но с

SELECT CONVERT_TZ(NOW(),'PST','GMT');

Я получил также NULL в результате. забавно, что пример в MySQL docu также возвращает null

SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_convert-tz кажется, вы нашли ошибку в mysql. (спасибо +Стивен Притчард)

вы могли бы попробовать:

SET @OLD_TIME_ZONE=@@TIME_ZONE;
SET TIME_ZONE='+00:00';
SELECT NOW();
SET TIME_ZONE=@OLD_TIME_ZONE;

ok не совсем то, что вы хотели (его 4 запроса, но только один выбор: -)


нет ошибки в CONVERT_TZ ()

чтобы использовать CONVERT_TZ (), вам нужно установить таблицы часового пояса, иначе MySql возвращает NULL.

из CLI выполните следующее как root

# mysql_tzinfo_to_sql /usr/доли/временной зоны | для MySQL -у корневого пользователя MySQL

посмотреть http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

спасибо

http://www.ArcanaVision.com (SJP 2011-08-18)


Примечание.: Мск, возможно, перехода на летнее время UTC не имеет DST

SELECT UTC_TIMESTAMP();

Я сделал cheatsheet здесь:должно MySQL нет своего часового пояса по Гринвичу?


верный способ получить текущее время в формате UTC:

SELECT CONVERT_TZ(NOW(), @@session.time_zone, '+0:00')

увидев все ответы выше и увидев, что ненадежно конвертировать в PST, я просто использовал это:

DATE_SUB (user_last_login, интервал 7 часов)


Это должно работать - я думаю, что вы указали свой часовой пояс неправильно. Использование Чикаго в качестве примера

SELECT CONVERT_TZ(NOW(), 'America/Chicago', 'GMT')

когда метка времени исходного сервера неизвестна, но требование для определенного tz делает это:

select convert_tz(utc_timestamp(),'+05:00','+00:00')

в качестве примера используется CST. utc_timestamp гарантирует результат "+00:00 " независимо от того, где вы его запрашиваете. "+05:00 " - это желаемое смещение. Это отлично работает при попадании нескольких неизвестных серверов, и это гарантирует, что вы возвращаете результат все будет в общем наборе результатов tz.


Я искал свой часовой пояс, который является GMT+6 (часовой пояс Азии/Дакки)

сервер MySQL находится в США. Ниже работал для меня.

ВЫБЕРИТЕ CONVERT_TZ( UTC_TIMESTAMP( ) , '+06:00', '+00:00' )


Это должно работать Выберите date_add (UTC_TIMESTAMP (), интервал 330 минут);


в функции CONVERT_TZ нет ошибки. Вы получаете NULL, потому что используете имена/сокращения часовых поясов. Mysql не знает, что означает этот "GMT", " PST " и т. д., Если вы не установите mysql.таблица time_zone_name. Однако, если вы используете цифры, это всегда будет работать.

mysql> SELECT CONVERT_TZ(NOW(), 'America/Chicago', 'GMT');

возвращает NULL

mysql> SELECT CONVERT_TZ(NOW(),'-08:00','+00:00');

возвращает 2016-06-24 17:58:33