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

Spark SQL中Unix时间戳转换返回错误结果求助

问题排查与解决

这是个典型的时间格式符混淆问题,我来帮你拆解原因和解决办法:

核心问题:格式符用错了

你在时间格式串里用的hh是12小时制的小时标识(范围是1-12),但你要处理的是24小时制的时间,应该用HH(范围0-23)。

为什么会出现两种不同的结果?

  • 对于2017-02-23 12:45:00:用hh解析时,12会被识别为12小时制的凌晨12点(对应24小时制的00:00),所以unix_timestamp转换后的时间戳对应凌晨00:45,最终返回2017-02-23 00:45:00。
  • 对于2017-02-23 13:45:00:13超出了12小时制hh的合法范围(1-12),Spark的unix_timestamp会触发宽松解析逻辑,直接把它当作24小时制的小时处理,所以刚好返回了你预期的结果——这其实是个“巧合正确”的情况,并不符合格式定义的规范。

修正后的代码

把格式串里的hh替换成HH就能得到正确结果:

spark.sql("select from_unixtime(unix_timestamp('2017-02-23 12:45:00', 'yyyy-MM-dd HH:mm:ss'))").show(false)

执行后会返回预期的2017-02-23 12:45:00。

小提示

Spark SQL的时间格式遵循Java SimpleDateFormat的规则,一定要注意大小写区分:

  • hh → 12小时制小时(1-12)
  • HH → 24小时制小时(0-23)
  • mm是分钟,MM是月份,这些也容易搞混,记得多加留意。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:13:27