Datetime 转换时区时注意夏令时

Datetime 转换时区时注意夏令时,datetime,timezone,amazon-redshift,dst,date-conversion,Datetime,Timezone,Amazon Redshift,Dst,Date Conversion,我有一个红移数据表,其中所有时间值都存储在CST中,我根据邮政编码(位置)将时间值转换为相应的时区 当我这么做的时候,我知道所有的时间值都是标准时间,因此我的函数用法是 CASE WHEN **** convert_timezone('CST', 'EST', time_column) WHEN **** convert_timezone('CST', 'MST', time_column) .... END 一旦我们进入夏令时,这可能不适用我如何处理这个问题,以便在2018年3

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

当我这么做的时候,我知道所有的时间值都是标准时间,因此我的函数用法是

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

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

不要使用时区缩写。这些规则有些模糊,只能指时区的一个方面。取而代之的是,在美国中部时间使用完整的编码,例如
America/Chicago

这在以下章节中得到了很好的解释:

使用时区名称

如果使用时区名称指定时区,CONVERT_时区会自动调整夏令时(DST)或在“timestamp”指定的日期和时间内对该时区有效的任何其他本地季节性协议,如夏季时间、标准时间或冬季时间。例如,“欧洲/伦敦”在冬季代表UTC,在夏季代表UTC+1

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

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

  • 获取纬度/经度坐标的近似值-根据源数据使用各种技术。例如,地理编码API可以采用街道地址并给出lat/lon
  • 然后使用以下技术之一确定该位置的时区标识符