转换时区时要注意夏令时

时间:2017-12-06 00:19:39

标签: datetime timezone amazon-redshift dst date-conversion

我有一个Redshift数据表,其中所有时间值都存储在CST中,我根据邮政编码(位置)将时间值转换为相应的时区。

虽然我这样做,但我知道所有时间值都在标准时间内,因此我的功能使用是

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

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

1 个答案:

答案 0 :(得分:1)

请勿使用时区缩写。有些含糊不清,只能参考时区的一个方面。相反,请使用完整的IANA time zone identifier,例如America/Chicago美国中部时间。

the Redshift docs中解释了这一点:

  

使用时区名称

     

如果您使用时区名称指定时区,CONVERT_TIMEZONE会自动调整夏令时(DST)或任何其他当地季节性协议,例如夏令时,标准时间或冬令时。在'timestamp'指定的日期和时间内的时区。例如,'Europe / London'表示冬季的UTC和夏季的UTC + 1。

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

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

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