Как преобразовать дату UTC в местный часовой пояс в MySql Select Query

Я использую это условие Where в одном из моих запросов с базой данных MySql. Моя проблема в том, что у меня есть один столбец времени отображения в моей таблице, но этот столбец таблицы показывает данные в формате UTC. И я хочу преобразовать этот столбец времени отображения в местное время Zone.so, как я могу предоставить эту возможность из самого запроса.

Я посмотрел на вещи и знал, что что-то вроде SELECT CONVERT_TZ() будет работать для этого. Но это не работает для меня.

Вот мой запрос, в котором мне нужно преобразовать время отображения в местный часовой пояс ... так может ли кто-нибудь помочь мне?

WHERE displaytime >= '2012-12-01 00:00:00'
  AND displaytime <='2013-02-22 23:59:59'
  AND ct.organizationId IN (
    SELECT t.organizationId
      FROM organization_ AS t
      JOIN organization_ AS p ON t.treePath LIKE CONCAT(p.treePath, '%')
     WHERE p.organizationId = 10707

введите описание изображения здесьSAmple DAta

введите описание изображения здесь


person User 1531343    schedule 22.02.2013    source источник
comment
Похоже, ваша таблица часовых поясов mysql пуста. Вы должны запустить команду mysql_tzinfo_to_sql для правильной работы CONVERT_TZ ().   -  person ursuleacv    schedule 06.06.2015
comment
где взять команду mysql_tzinfo_to_sql?   -  person user1073214    schedule 07.10.2015
comment
Если у вас есть смещение, вы можете использовать эту функцию DATE_ADD (displaytime, INTERVAL {+ -YOUR_OFFSET_IN_MINUTES} MINUTE). Нет необходимости использовать оператор IF / ELSE для DATE_SUB, всегда используйте DATE_ADD, sub или add будут применяться в зависимости от значения offcet, которое может быть положительным или отрицательным.   -  person vinsa    schedule 01.08.2019


Ответы (3)


SELECT CONVERT_TZ () будет работать для этого. Но это не работает для меня.

Почему, какая у вас ошибка?

SELECT CONVERT_TZ(displaytime,'GMT','MET');

должен работать, если тип вашего столбца - метка времени или дата

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_convert-tz.

Проверьте, как это работает:

SELECT CONVERT_TZ(a_ad_display.displaytime,'+00:00','+04:00');

Проверьте таблицу часовых поясов

SELECT * FROM mysql.time_zone;
SELECT * FROM mysql.time_zone_name;

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

Если эти таблицы пусты, вы не инициализировали свои таблицы часовых поясов. По ссылке выше вы можете использовать программу mysql_tzinfo_to_sql для загрузки таблиц часовых поясов. Пожалуйста, попробуйте это

shell> mysql_tzinfo_to_sql /usr/share/zoneinfo

или, если не работает, прочтите больше: http://dev.mysql.com/doc/refman/5.5/en/mysql-tzinfo-to-sql.html

person iiro    schedule 22.02.2013
comment
это дает мне нулевое значение SELECT CONVERT_TZ (a_ad_display.displaytime, 'GMT', 'MET') как date_ из a_ad_display; Моя колонка - это тип DATETIME - person User 1531343; 22.02.2013
comment
Вы можете опубликовать, что ПОКАЗАТЬ СОЗДАТЬ ТАБЛИЦУ a_ad_display \ G; будет отображать - person iiro; 22.02.2013
comment
Это не помогает. Приведите структуру вашей таблицы и образцы данных. - person iiro; 22.02.2013
comment
В моей структуре таблицы это один столбец, для которого я хочу преобразовать локальный DAte, его тип - [DATETIME] ... см. Мой обновленный вопрос для образцов данных. - person User 1531343; 22.02.2013
comment
Если это образец данных, вы получите NULL, потому что значения вашего столбца равны NULL. Таким образом, я думаю, что это результат выборки, а не данные выборки? Во всяком случае, я отредактировал свой ответ. - person iiro; 22.02.2013
comment
Поэтому я не могу использовать GMT ИЛИ UTC В ВЫБОРКЕ CONVERT_TZ (displaytime, 'GMT', 'MET') ;? - person User 1531343; 22.02.2013
comment
вы проверили свою таблицу часовых поясов? - person iiro; 22.02.2013
comment
где должна быть таблица часовых поясов? у меня есть таблица часовых поясов? - person User 1531343; 22.02.2013
comment
извините, моя ошибка: выберите * From mysql.time_zone; - person iiro; 22.02.2013
comment
Да, вы должны загрузить информацию о часовом поясе в db. Проверьте мой ответ. - person iiro; 22.02.2013
comment
Yo la useizo así: ВЫБЕРИТЕ CREADO AS ORIGINAL, CONVERT_TZ (CREADO, 'GMT', 'America / Mexico_City'), КОММЕНТАРИИ ОТ bd_mybd.tblcomments; | - person Pedro Castillo; 09.11.2016
comment
@PedroCastillo sori, en ymmärrä mitä kirjotat. - person iiro; 09.11.2016

В моем случае, когда часовые пояса недоступны на сервере, это отлично работает:

SELECT CONVERT_TZ(`date_field`,'+00:00',@@global.time_zone) FROM `table`

Примечание: global.time_zone использует часовой пояс сервера. Вы должны убедиться, что он имеет желаемый часовой пояс!

person Felix Geenen    schedule 30.06.2014
comment
Я получаю на 10-15 секунд больше времени в метке времени UTC. - person Shashank Shah; 16.02.2017

 select convert_tz(now(),@@session.time_zone,'+05:30')

замените '+05: 30' желаемым часовым поясом. см. здесь - https://stackoverflow.com/a/3984412/2359994

для форматирования в желаемый формат времени, например:

 select DATE_FORMAT(convert_tz(now(),@@session.time_zone,'+05:30') ,'%b %d %Y %h:%i:%s %p') 

вы получите подобное -> 17 декабря 2014 г., 10:39:56

person Som    schedule 03.11.2014