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

AWS Athena字符串转时间戳报错,求问题排查及解决方法

嘿,我来帮你搞定这个Athena时间转换的问题!

你遇到的错误根源是Athena用的是Presto的日期解析规则,但你用的%i(分钟)和%r(12小时制时间)是MySQL的格式符,Presto根本不认识这些,所以才会报错。

先给你直接的解决方案,针对你的string_time格式(比如2020-12-07 11:00:02 AM -06:00、2020-12-07 2:54:46 PM -06:00),正确的解析语句应该是:

parse_datetime(string_time, '%Y-%m-%d %l:%M:%S %p %:z')

我给你拆解下这个格式符的含义,避免再踩坑:

  • %Y: 4位年份(比如2020)
  • %m: 2位月份(01-12)
  • %d: 2位日期(01-31)
  • %l: 12小时制的小时(1-12,支持不带前导零的情况,比如你的第二个例子里的2)
  • %M: 2位分钟(00-59,这就是你之前用%i想要实现的效果)
  • %S: 2位秒数(00-59)
  • %p: AM/PM标识(大小写都兼容)
  • %:z: 带冒号的时区偏移(比如-06:00,如果是不带冒号的-0600就用%z)

另外,你之前用substr截取前22位其实没必要,保留完整的时区信息能让时间转换更准确,毕竟不同时区的时间计算会有差异。

举两个测试例子验证下:

  • 解析2020-12-07 11:00:02 AM -06:00:parse_datetime('2020-12-07 11:00:02 AM -06:00', '%Y-%m-%d %l:%M:%S %p %:z')会返回带时区的时间戳
  • 解析2020-12-07 2:54:46 PM -06:00:同样的格式也能正确识别不带前导零的小时数

最后提醒下:Presto的日期格式符和MySQL、Java的都有差异,比如Presto里%m是月份,%M才是分钟,别搞混啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:08:08