Запрос 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. Заранее благодарим за помощь!
Ответы
Ответ 1
это должно работать, но с
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 @[email protected]@TIME_ZONE;
SET TIME_ZONE='+00:00';
SELECT NOW();
SET [email protected]_TIME_ZONE;
ok не совсем то, что вы хотели (его 4 запроса, но только один выбор: -)
или вы используете UTC (не влияет на летнее время)
SELECT UTC_TIMESTAMP();
Ответ 2
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)
Ответ 3
Примечание:
GMT может иметь DST
UTC не имеет DST
SELECT UTC_TIMESTAMP();
Я сделал чит-коды здесь: Должен ли MySQL установить часовой пояс в UTC?
Ответ 4
Верным способом получения текущего времени и времени UTC является:
SELECT CONVERT_TZ(NOW(), @@session.time_zone, '+0:00')
Ответ 5
Увидев все ответы выше и увидев, что это ненадежное преобразование в PST, я просто использовал это:
DATE_SUB (user_last_login, INTERVAL 7 часов)
Ответ 6
Это должно сработать - я думаю, что вы указали свой часовой пояс неправильно. Использование Чикаго в качестве примера
SELECT CONVERT_TZ(NOW(), 'America/Chicago', 'GMT')
Ответ 7
Если временная метка исходного сервера неизвестна, но для конкретного tz это необходимо:
select convert_tz(utc_timestamp(),'+05:00','+00:00')
В качестве примера используется CST.
utc_timestamp гарантирует результат "+00: 00" независимо от того, где вы его запрашиваете.
"+05: 00" - ваше желаемое смещение.
Это отлично работает при удалении нескольких неизвестных серверов и гарантирует, что вы возвращаете результат, все будут в общем наборе результатов tz.
Ответ 8
Я искал свой часовой пояс, который является GMT + 6 (Asia/Dhaka TimeZone)
Сервер MySQL находится в США. Ниже я работал у меня.
SELECT CONVERT_TZ (UTC_TIMESTAMP(), '+06: 00', '+00: 00')
Ответ 9
В функции 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