转换时区时应注意夏令时

人气:661 发布:2022-10-16 标签: datetime timezone dst amazon-redshift date-conversion

问题描述

我有一个红移数据表,其中所有时间值都存储在CST中,并且我根据邮政编码(位置)将时间值转换为各自的时区。

执行此操作时,我了解到所有时间值都采用标准时间,因此我的函数使用情况

CASE WHEN **** convert_timezone('CST', 'EST', time_column)  
     WHEN **** convert_timezone('CST', 'MST', time_column)
....
END

一旦我们进入夏令时,这可能不适用。如何处理此问题,以便在2018年3月及以后不会再次修改SQL查询?

推荐答案

不要使用时区缩写。有些模棱两可,只能指时区的一个方面。而应使用完整的IANA time zone identifier,例如America/Chicago表示美国中部时间。

这在the Redshift docs:

中有很好的解释

使用时区名称

如果使用时区名称指定时区,CONVERT_TIMEZONE会根据夏令时(DST)或任何其他本地季节性协议(如夏季时间、标准时间或冬季时间)自动进行调整,这些协议在"timeStamp"指定的日期和时间期间对该时区有效。例如,‘Europe/London’表示冬季的UTC和夏季的UTC+1。

就您问题中的邮政编码部分而言,请了解并不是每个邮政编码都是基于地区的。还有技术任务、海外APO/FPO地址、美国领土和其他边缘案例。此外,某些邮政编码可能跨越多个时区。

如果可能,更好的方法是:

获取纬度/经度坐标的近似值-根据源数据使用各种技术。例如,地理编码API可以采用街道地址并提供经度/纬度。 然后使用其中一种技术listed here确定该位置的时区标识符。

148