AWS Athena的parse_datetime函数是否支持CET时区及简洁调用方式?
解答
更简洁写法说明
你当前使用的parse_datetime('2021-11-01 09 UTC', 'YYYY-MM-dd HH z') AT TIME ZONE 'CET'已经是通用场景下的最简合法写法,没有多余执行步骤。
如果你的输入字符串时区固定为UTC,可进一步简化为如下写法,执行结果完全一致:
SELECT with_timezone(parse_datetime('2021-11-01 09', 'YYYY-MM-dd HH'), 'UTC') AT TIME ZONE 'CET'
CET不被parse_datetime支持的原因
Presto的parse_datetime函数底层基于Java的时间格式化工具实现,时区缩写解析默认采用严格匹配规则,仅支持无歧义的全球通用时区缩写:
- UTC、PST这类缩写属于全球统一、无多义性的时区标识,可直接被识别
- CET、CEST这类时区缩写存在多义性(不同国家/地区曾使用相同缩写代表不同的时区偏移规则),默认未被纳入解析支持范围,因此直接传入CET作为待解析的时区标识会运行失败。
测试用例验证
你提供的测试用例运行结果符合上述逻辑:
SELECT parse_datetime('2021-11-01 09 UTC', 'YYYY-MM-dd HH z'), -- 运行正常 parse_datetime('2021-11-01 09 UTC', 'YYYY-MM-dd HH z') AT TIME ZONE 'CET', -- 运行正常 parse_datetime('2021-11-01 09 PST', 'YYYY-MM-dd HH z'), -- 运行正常 parse_datetime('2021-11-01 09 CET', 'YYYY-MM-dd HH z') -- 运行失败
内容的提问来源于stack exchange,提问作者DaveR
相关产品推荐
相关产品推荐

