MySQL запрос на текущее время по Гринвичу - PullRequest
25 голосов
/ 13 февраля 2010

Это звучит достаточно просто, но я не смог понять, как использовать простой оператор 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 ]

35 голосов
/ 13 февраля 2010

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

SELECT UTC_TIMESTAMP();

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

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

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

Я также получил NULL в результате. достаточно забавно, что пример в документе mysql также возвращает нуль

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;

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

13 голосов
/ 18 августа 2011

NO BUG in CONVERT_TZ ()

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

Из CLI запустите следующее от имени пользователя root

# mysql_tzinfo_to_sql / usr / share / zoneinfo | mysql -u root mysql

СМ. http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

Спасибо

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

12 голосов
/ 01 октября 2013

Примечание: GMT может иметь DST UTC не имеет DST

SELECT UTC_TIMESTAMP();

Я сделал таблицу здесь: Должен ли MySQL иметь часовой пояс с UTC?

5 голосов
/ 24 ноября 2015

Безошибочный способ получения текущей даты и времени UTC:

SELECT CONVERT_TZ(NOW(), @@session.time_zone, '+0:00')
0 голосов
/ 17 июля 2018

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

0 голосов
/ 26 декабря 2017

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

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

SELECT CONVERT_TZ (UTC_TIMESTAMP (), '+06: 00', '+00: 00')

0 голосов
/ 15 сентября 2016

Если временная метка исходного сервера неизвестна, но для конкретного tz требуется следующее:

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

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

0 голосов
/ 24 июня 2016

В функции 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

0 голосов
/ 14 октября 2015

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

SELECT CONVERT_TZ(NOW(), 'America/Chicago', 'GMT')
0 голосов
/ 17 марта 2012

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

DATE_SUB (user_last_login, ИНТЕРВАЛ 7 часов)

...