【问题标题】:MySql - SELECT TimeStamp Column in UTC formatMySql - 选择UTC格式的时间戳列
【发布时间】:2011-12-03 23:09:12
【问题描述】:

在我的 Mysql 5.0 DB 中,我有一列来控制 LastUpdated 信息。 Column 是一个时间戳,MySql 自动更新数据。

我正在尝试以 UTC 格式选择此列。

问题是服务器设置为美国日期时间。根据 MySql 文档,数据库以 UTC 存储信息,但是当我想显示信息时,它会将其转换为服务器的时间。

有什么方法可以避免这种转换吗?

【问题讨论】:

标签: mysql utc


【解决方案1】:
SELECT 
CONVERT_TZ(`timestamp_field`, @@session.time_zone, '+00:00') AS `utc_datetime` 
FROM `table_name`

我在这里做了一个备忘单:Should MySQL have its timezone set to UTC?

为避免@spencer7593 提到的时间重叠问题,我建议始终以 UTC 格式存储日期

【讨论】:

  • 这确实是最好的答案。 @@session.time_zone 碰巧是什么并不重要,它允许您选择 UTC 中的一些列和会话 time_zone 中的一些列。如果您有偏移量,则可以使用相同的技术来选择用户的时区。
  • 注意:如果会话 time_zone 受夏令时调整的影响,例如CST6CDT,时钟“倒退”的一小时将是模棱两可的。
  • @spencer7593:为什么? Convert_Tz 肯定会考虑夏令时吗?
  • @mcmillab:在后备星期天,有两个重叠的时间用相同的本地时间表示。从凌晨 1 点到凌晨 2 点有一个小时,然后时钟调回,然后还有一个小时,在当地时间也表示为凌晨 1 点到凌晨 2 点。作为演示,请考虑:SELECT CONVERT_TZ('2011-11-06 06:11:00','UTC','US/Central'), CONVERT_TZ('2011-11-06 07:12:00','UTC','US/Central');SELECT CONVERT_TZ('2011-11-06 01:11:00','US/Central','UTC'), CONVERT_TZ('2011-11-06 01:12:00','US/Central','UTC');
【解决方案2】:

除了更改服务器的默认时区外,还可以通过执行以下 SQL 语句来调整每个连接的时区:

SET time_zone = timezone;

其中 timezone 是时区的名称 (see MySQL docs)。

或者,您也可以使用CONVERT_TZ function 将时间戳转换为不同的时区。

【讨论】:

    【解决方案3】:

    我需要更改它以在其他内容的末尾添加“Z”(例如 jQuery timeago)知道时间是 UTC:

    SELECT 
    CONCAT(CONVERT_TZ(`timestamp_field`, @@session.time_zone, '+00:00'), 'Z') 
         AS `utc_datetime` 
    FROM `table_name`
    

    【讨论】:

      猜你喜欢
      • 2018-11-07
      • 1970-01-01
      • 2015-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      相关资源
      最近更新 更多