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

如何将'May 11 2022 9:16AM'字符串正确转换为timestamp时间戳

返回结果后缀含义

你看到的00.000 -0300是带时区时间戳(timestamptz类型)的标准输出组成部分:

  • 00.000是亚秒精度字段,因为你输入的时间字符串没有指定毫秒/微秒值,这部分默认填充为0
  • -0300是当前数据库会话的时区偏移量,代表当前会话时区比UTC时间晚3小时,不是解析错误导致的。
原写法的问题与正确转换方案

你当前使用的格式串存在隐患:没有匹配输入字符串末尾的AM标识,仅靠HH匹配12小时制时间,遇到下午的时间值会出现解析错误。
要得到你预期的2022-05-11 09:16:00格式结果,有两种常用写法:

  • 显式转换为不带时区的timestamp类型
    补全格式串的AM匹配规则后,将to_timestamp返回的带时区结果强转为不带时区的timestamp类型,会自动舍弃时区偏移和亚秒补零部分:
    select to_timestamp('May 11 2022  9:16AM', 'Month DD YYYY HH12:MI AM')::timestamp;
    
    执行返回结果即为2022-05-11 09:16:00。
  • 直接格式化为目标字符串
    如果需要直接得到对应格式的字符串结果,可以用to_char指定输出格式:
    select to_char(
      to_timestamp('May 11 2022  9:16AM', 'Month DD YYYY HH12:MI AM'),
      'YYYY-MM-DD HH24:MI:SS'
    );
    

注意:格式串中建议用HH12明确指定12小时制,和AM标识搭配可以覆盖所有12小时制时间的解析场景,避免隐式匹配带来的异常。

内容的提问来源于stack exchange,提问作者Doug Fir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:57:20