You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中YYYYMMdd字符串转CST时间戳问题求助

解决方法

你的问题出在to_date返回的是无时区的日期类型,extract(epoch ...)默认会把这个日期当作UTC(GMT)的午夜来计算时间戳。要得到美国中部时间(CST/CDT)对应的时间戳,需要明确指定时区转换:

修正后的SQL语句:

select case when trim(end_dt)='00010101' then 0
            else extract(epoch from to_timestamp(end_dt,'YYYYMMDD') at time zone 'America/Chicago') * 1000
       end as end_date
from tbl;

也可以用to_date结合时区转换,效果一致:

select case when trim(end_dt)='00010101' then 0
            else extract(epoch from (to_date(end_dt,'YYYYMMDD')::timestamp at time zone 'America/Chicago')) * 1000
       end as end_date
from tbl;

关键说明:

  • 不要直接用CST作为时区标识符,它可能指代多个时区(比如澳大利亚中部时间),America/Chicago是美国中部时间的标准时区名,会自动处理夏令时(CDT)的切换。
  • to_timestamp或to_date::timestamp先把字符串转成无时区的时间戳,再用at time zone 'America/Chicago'将其解释为美国中部时间的午夜,PostgreSQL会自动转换为对应UTC时间来计算epoch,最终得到的就是美国中部时间当天午夜对应的毫秒级Unix时间戳。

内容的提问来源于stack exchange,提问作者Sashi K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:27:33