如何将日期时间从任何区域转换为mysql中的特定区域

时间:2012-05-30 17:17:49

标签: mysql convert-tz

我有一个mySQL表,其中包含从各个不同时区记录的日期。如何在mySQL中执行SELECT语句时将DateTime值转换为查看用户TimeZone?

    SELECT ClientID,
        convert_tz(MessageDate,???,???)
        MeetingType,
        MeetingDate,
        Comments,
        CompanyName
    FROM clientCompNotes
    WHERE ClID = 970392281 AND CompanyID=411972145

问题是接受来自" MessageDate"中记录的日期的任何时区。字段,看起来像这样

 Wed May 30 2012 12:51:02 GMT-0400 (Eastern Daylight Time)

非常感谢

丹尼斯

2 个答案:

答案 0 :(得分:1)

CONVERT_TZ(dt,from_tz,to_tz)

from_tz是当前时间所在的时区,而to_tz是您要将其转换为的时区。

答案 1 :(得分:1)

你不应该这样做。 MySQL将为您执行时区转换,前提是您将时间存储在TIMESTAMP类型列中,并且您可以适当地设置会话time_zone变量。如the manual中所述:

  

MySQL服务器维护多个时区设置:

     

[...]

     
      
  • 每个连接时区。连接的每个客户端都有自己的时区设置,由会话time_zone变量给出。最初,会话变量从全局time_zone变量中获取其值,但客户端可以使用以下语句更改自己的时区:

    mysql> SET time_zone = timezone;
  •   
     

当前会话时区设置会影响区域敏感的时间值的显示和存储。这包括NOW()CURTIME()等函数显示的值,以及TIMESTAMP列中存储和检索的值。 TIMESTAMP列的值将从当前时区转换为UTC以进行存储,并从UTC转换为当前时区以进行检索。

     

当前时区设置不会影响UTC_TIMESTAMP()等功能显示的值或DATETIMEDATETIME列中的值。这些数据类型中的值也不是以UTC格式存储的;仅当从TIMESTAMP值转换时,时区才适用于它们。如果您想要DATETIMEDATETIME值的特定于语言环境的算术,请将它们转换为UTC,执行算术,然后转换回来。