Databricks Spark中to_utc_timestamp的CST时区规则文档查找方法
问题原因
你观察到的UTC偏移量不一致,核心原因是CST是存在多重歧义的时区缩写,Spark默认将其识别为北美中部时间,而非你预期的固定偏移时区。
- 北美中部时间执行夏令时制度:冬令时时段采用UTC-6偏移,夏令时时段切换为UTC-5偏移,和你的测试结果完全吻合:
- 2022年2月26日处于北美冬令时周期,传入时间按UTC-6转换为UTC,差值为6小时,和第一次返回结果一致
- 2021年8月26日处于北美夏令时周期,传入时间按UTC-5转换为UTC,差值为5小时,和第二次返回结果一致
函数计算逻辑与时区规则
to_utc_timestamp的计算逻辑:接收输入时间值和对应的时区标识,基于全球通用的IANA时区数据库规则,将输入时间转换为UTC时区时间戳,转换过程会自动适配对应时区的夏令时调整规则。- CST缩写在IANA时区规则中没有唯一对应关系,可匹配至少4个不同时区:
- 北美中部时间(美国、加拿大中部区域):冬令时UTC-6,夏令时UTC-5,是JVM(Spark运行依赖的底层环境)默认匹配的CST对应时区
- 中国标准时间:固定UTC+8,无夏令时调整
- 古巴标准时间:冬令时UTC-5,夏令时UTC-4
- 澳大利亚中部标准时间:冬令时UTC+9:30,夏令时UTC+10:30
解决方案
如果你需要按固定偏移的规则做时间转换,不要使用歧义缩写CST作为时区参数,传入明确的IANA标准时区ID即可得到稳定结果。比如要使用中国标准时间转换,可执行如下语句:
-- 指定中国标准时间对应时区,无夏令时变动,固定UTC+8偏移 select to_utc_timestamp('2021-08-26 17:35:36', "Asia/Shanghai")
上述语句执行后会固定返回UTC时间2021-08-26 09:35:36,不会出现偏移量随季节变动的问题。
内容的提问来源于stack exchange,提问作者OrganicMustard
相关产品推荐
相关产品推荐

