Запрос 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' )
в функции 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