Подтвердить что ты не робот

Как я могу использовать функции MySQL NOW() и CURDATE(), используя UTC?

Я хочу сделать так, чтобы вызовы NOW() и CURDATE() в запросах MySQL возвращали дату в UTC. Как это сделать, не проходя и не изменяя все запросы, которые используют эти функции?

4b9b3361

Ответ 1

Наконец нашел то, что искал...

В my.cnf,

[mysqld_safe]
timezone = UTC

Я помещал эту опцию в [mysqld], и mysql не запускался.

Вызов "SET time_zone = '+ 0:00';" на каждой загрузке страницы также будет работать, но мне не нравится идея вызова этого запроса при загрузке каждой страницы.

Ответ 2

Установите часы сервера в UTC. На самом деле нет.

Если вы можете это сделать, сделайте это.

Одной из самых больших головных болей является работа "cron" и т.д., работающая в местном часовом поясе, это означает, что некоторые задания cron будут пропущены один раз в год, а все остальные будут работать в другое время GMT в течение полугода (I Предполагая, что вы находитесь в часовом поясе, где есть летнее время).

У MySQL есть поддержка часового пояса, но она сумасшедшая и перепутанная. Не используйте его, если вам это не нужно. Просто установите часы сервера на UTC, и время начнет работать, как должно быть.

Я знаю, что изменение часов сервера является серьезным изменением для любой управляемой системы, и у вас может быть большое количество серверов и служб, которые могут быть затронуты, но, пожалуйста, попробуйте сделать это в любом случае. Работа QA может быть значительной, но попробуйте.

Ответ 3

Откройте файл /etc/mysql/my.cnf и добавьте эту строку ниже в разделе [mysqld]

default-time-zone = '+00: 00'

Затем перезагрузите mysql. Теперь выберите curtime(); показывает время по Гринвичу.

Ответ 4

Если изменение часового пояса на ваших рабочих серверах или обновление настроек конфигурации ключа и перезапуск mysql кажется нереалистичным и/или чрезмерным, попробуйте следующее:

CONVERT_TZ(NOW(), 'US/Pacific', 'UTC')

Где US/Pacific - это часовой пояс, ваш вызов NOW() возвращает время.

Ответ 5

Правильный способ сделать это - изменить часовой пояс вашего сервера на UTC, как сказал MarkR.

Однако также можно использовать SET time_zone, чтобы изменить часовой пояс для текущего сеанса.

Из руководства:

Текущая настройка часового пояса влияет на отображение и сохранение значений времени, чувствительных к зоне. Сюда входят значения, отображаемые такими функциями, как NOW() или CURTIME()

Ответ 6

Вам нужно будет использовать оператор SET TIMESTAMP для форматирования результатов datetime в нужном формате. Это будет означать изменение всех этих запросов. sysdate() не будет соблюдать это, хотя.

Ответ 7

UTC_TIMESTAMP()

Возвращает текущую дату и время UTC в виде значения в формате "ГГГГ-ММ-ДД чч: мм: сс" или ГГГГММДДччммсс.уууууу, в зависимости от того, используется ли функция в строковом или числовом контексте.

UTC_DATE()

Возвращает текущую дату UTC в виде значения в формате "ГГГГ-ММ-ДД" или ГГГГММДД в зависимости от того, используется ли функция в строковом или числовом контексте.

UTC_TIME()

Возвращает текущее время UTC в виде значения в формате "чч: мм: сс" или hhmmss.uuuuuu, в зависимости от того, используется ли функция в строковом или числовом контексте.

Ссылка на MySQL: https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_utc-timestamp