将东部时区转换为 UTC

Convert Eastern timezone to UTC

我正在使用一个以当地时间记录时间戳的系统。我正在尝试转换为 UTC。时间偏移根据当前是否为夏令时而变化。现在我正在使用下面的代码手动检查给定的 event_ts 是否处于夏令时,但似乎必须有更好的方法。

SELECT
  IF(DATE(event_ts) BETWEEN '2020-03-08' AND '2020-11-01'
    OR DATE(event_ts) BETWEEN '2021-03-14' AND '2021-11-07'
    OR DATE(event_ts) BETWEEN '2022-03-13' AND '2022-11-06'
    OR DATE(event_ts) BETWEEN '2023-03-12' AND '2023-11-05'
    OR DATE(event_ts) BETWEEN '2024-03-10' AND '2024-11-03'
    OR DATE(event_ts) BETWEEN '2025-03-09' AND '2025-11-02'
    OR DATE(event_ts) BETWEEN '2026-03-08' AND '2026-11-01'
    OR DATE(event_ts) BETWEEN '2027-03-14' AND '2027-11-07'
    OR DATE(event_ts) BETWEEN '2028-03-12' AND '2028-11-05'
    OR DATE(event_ts) BETWEEN '2029-03-11' AND '2029-11-04',
        CONVERT_TZ(event_ts, '-04:00', '+00:00'),
        CONVERT_TZ(event_ts, '-05:00', '+00:00')) AS 'Timestamp'
FROM events

首先,有一个实用程序可以将系统的 IANA 时区数据 (tzdata) 加载到 mysql:

https://dev.mysql.com/doc/refman/8.0/en/mysql-tzinfo-to-sql.html

一旦你 运行,你就可以在 CONVERT_TZ:

中使用 IANA 时区
CONVERT_TZ(event_ts, 'America/New_York', '+00:00') As 'Timestamp'

重新运行 如果您更新系统 tzdata 文件(一年可能发生多次)。