Postgres "time zone at" 在转换时不遵守山地标准时间
Postgres "time zone at" isn't respecting mountain standard time when converting
我有一个类型为 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 时区类型的误解。话虽如此,在此先感谢您的教育!
表达式 timezone('America/Denver', starts_at)
将 starts_at
解释为丹佛当地时间,结果是 timestamp with time zone
.
现在,当您输出该值时,它会转换为您的会话时区,即 UTC。
丹佛的 13:05 是 UTC 的 19:05,这恰好是您的会话时区。
在夏令时期间,丹佛与 UTC 相差 6 小时。
我有一个类型为 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 时区类型的误解。话虽如此,在此先感谢您的教育!
表达式 timezone('America/Denver', starts_at)
将 starts_at
解释为丹佛当地时间,结果是 timestamp with time zone
.
现在,当您输出该值时,它会转换为您的会话时区,即 UTC。
丹佛的13:05 是 UTC 的 19:05,这恰好是您的会话时区。
在夏令时期间,丹佛与 UTC 相差 6 小时。