Запрос MySQL на текущее время по Гринвичу

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

9 ответов

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

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

В результате я получил также NULL. довольно забавно пример в документе mysql также возвращает 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 запроса, но только один выбор: -)

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

SELECT UTC_TIMESTAMP();


NO BUG в CONVERT_TZ()

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

В командной строке выполните следующие действия: 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)


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

SELECT UTC_TIMESTAMP();

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


Верным способом получения текущего времени и времени UTC является:

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


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

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

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


Я искал свой часовой пояс, который является GMT + 6 (Asia/Dhaka TimeZone)

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

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


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

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


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

DATE_SUB (user_last_login, INTERVAL 7 часов)


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

licensed under cc by-sa 3.0 with attribution.