【问题标题】:How to Convert UTC Date To Local time Zone in MySql Select Query如何在 MySql 选择查询中将 UTC 日期转换为本地时区
【发布时间】:2013-02-07 16:39:43
【问题描述】:

我在 MySql 数据库的一个查询中使用此 Where 条件。我的问题是我的表中有一个显示时间列,但该表列以 UTC 时间显示数据。我想将该显示时间列转换为本地时区。所以我如何从查询本身提供这个设施。

我已经仔细检查了这些东西,因此我知道像 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

样本数据

【问题讨论】:

  • 看起来你的 mysql 时区表是空的。您必须运行 mysql_tzinfo_to_sql 命令才能使 CONVERT_TZ() 正常工作。
  • 哪里可以获得mysql_tzinfo_to_sql命令?
  • 如果你有偏移量,你可以使用这个函数 DATE_ADD(displaytime, INTERVAL {+-YOUR_OFFSET_IN_MINUTES} MINUTE)。 DATE_SUB 不需要使用 IF/ELSE 语句,始终使用 DATE_ADD,sub 或 add 将根据 offcet 值应用,可以是正数或负数。

标签: mysql utc localtime convert-tz


【解决方案1】:

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

【讨论】:

  • 它给了我空值 SELECT CONVERT_TZ(a_ad_display.displaytime,'GMT','MET') as date_ from a_ad_display;我的专栏是 DATETIME 类型
  • 你能发布什么 SHOW CREATE TABLE a_ad_display\G;将显示
  • 这没有任何帮助。请给出您的表结构和示例数据。
  • 在我的表结构中,这是我想要转换本地日期的一列,它的类型是 [DATETIME] ..请参阅我更新的示例数据问题
  • 如果这是示例数据,那么您会得到空值,因为您的列值为空值。因此,我认为这是样本结果,而不是样本数据?无论如何,我编辑了我的答案。
【解决方案2】:

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

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

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

【讨论】:

  • UTC 时间戳增加了 10-15 秒。
【解决方案3】:
 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') 

你会得到类似的结果 -> 2014 年 12 月 17 日上午 10:39:56

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 2012-01-28
    相关资源
    最近更新 更多