如何在MySQL Select Query中将UTC日期转换为本地时区

brccelvz  于 9个月前  发布在  Mysql
关注(0)|答案(4)|浏览(103)

我在我的一个查询中使用了这个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

字符串


样本数据a


rsl1atfo

rsl1atfo1#

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

4ktjp1zp

4ktjp1zp2#

在我的情况下,服务器上没有时区,这很好用:

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

字符串
注意:global.time_zone使用服务器时区。您必须确保它具有所需的时区!

rqqzpn5f

rqqzpn5f3#

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')


你会得到类似的-> Dec 17 2014 10:39:56 AM

r8uurelv

r8uurelv4#

使用“CST”和“EST”等3个字符的时区不一致(例如,我的mysql.time_zone_name有“EST”,但没有“CST”)。

> SELECT * FROM mysql.time_zone_name where name like 'us/%';
+-------------------+--------------+
| Name              | Time_zone_id |
|-------------------+--------------|
| US/Alaska         | 580          |
| US/Aleutian       | 581          |
| US/Arizona        | 582          |
| US/Central        | 583          |
| US/East-Indiana   | 584          |
| US/Eastern        | 585          |
| US/Hawaii         | 586          |
| US/Indiana-Starke | 587          |
| US/Michigan       | 588          |
| US/Mountain       | 589          |
| US/Pacific        | 590          |
| US/Samoa          | 591          |
+-------------------+--------------+

字符串
然后使用“Name”值作为第二个参数:

select convert_tz(insert_timestamp,'UTC','US/Central') from table;


这种方法比从UTC硬编码一个数字偏移更好,因为这个数字会根据夏令时是否有效而改变。

相关问题