【问题标题】:Postgres "time zone at" isn't respecting mountain standard time when convertingPostgres“时区”在转换时不尊重山区标准时间
【发布时间】:2018-11-21 20:42:34
【问题描述】:

我有一个类型为 TIMESTAMP WITHOUT TIME ZONE 的列 starts_at,因为它代表约会时间,不应在 DST 轮班期间更改。

但是,我们处理定期约会的图书馆这次需要采用 UTC。我正在尝试将 starts_at 转换为 UTC,但我看到我得到的时间代表 MDT(夏令时)而不是 MST(标准时间)。

例如,采取以下方式:

SELECT starts_at, timezone('America/Denver', starts_at) AS new_starts_at

我希望得到以下结果:

--------------------------------------------------
| starts_at              | new_starts_at
--------------------------------------------------
| 2018-09-04 13:05:00    |  2018-09-04 20:05:00+00

相反,我得到以下信息:

--------------------------------------------------
| starts_at              | new_starts_at
--------------------------------------------------
| 2018-09-04 13:05:00    |  2018-09-04 19:05:00+00

new_starts_at 应该返回MST,即2018-09-04 20:05:00+00。我的印象是,使用奥尔森时区 (America/Denver) 会通知 Postgres 是否有 DST 转换。如果我将America/Denver 替换为MST,我会看到正确的结果。

我确信这只是我对 Postgres 时区类型的误解。也就是说,提前感谢您的教育!

【问题讨论】:

    标签: postgresql timestamp-with-timezone


    【解决方案1】:

    表达式timezone('America/Denver', starts_at)starts_at 解释为丹佛当地时间,结果是timestamp with time zone

    现在,当您输出该值时,它会转换为您的会话时区,即 UTC。

    丹佛的 13:05 是 UTC 的 19:05,恰好是您的会话时区。

    在夏令时期间,丹佛与 UTC 相差 6 小时。

    【讨论】:

    • 13:05 丹佛是 UTC 时间 20:05。在夏令时,现在是 19:05
    • 对,9 月,夏令时仍然有效。
    猜你喜欢
    • 2012-10-29
    • 2018-11-26
    • 1970-01-01
    • 2021-01-16
    • 2021-11-27
    • 2018-06-12
    • 1970-01-01
    • 2019-03-24
    • 2023-03-24
    相关资源
    最近更新 更多