雪花CONVERT_TIMEZONE错误?

0

的问题

在雪花、转换时,一些当地的日期为UTC然后回到当地的时区使用CONVERT_TIMEZONE功能,最终的结果是通过一小时。 例如:

ALTER SESSION SET TIMEZONE = 'Canada/Eastern';
select
cast('1949-04-24' as timestamp) as date_local -- because TIMEZONE = 'Canada/Eastern'
, convert_timezone('Canada/Eastern', 'UTC', '1949-04-24') as date_utc
, convert_timezone('UTC', 'Canada/Eastern', convert_timezone('Canada/Eastern', 'UTC', '1949-04-24')) as date_local1

结果是:

DATE_LOCAL DATE_UTC DATE_LOCAL1
1949-04-24 00:00:00.0 1949-04-24 05:00:00.0 1949-04-24 01:00:00.0

我希望这两个DATE_LOCAL和DATE_LOCAL1是相同的,但是DATE_LOCAL1是一个小时。 是这样的期望吗? 我失去了一些东西或者有一个错误的CONVERT_TIMEZONE功能?

snowflake-cloud-data-platform
2021-11-23 21:46:09
1

最好的答案

3

这不是一个错误。 这是夏令时间(DST). 1949年,DST开始在星期日、24日00:00. 所以当你把它UTC,它变得1949-04-24 05:00:00.0. 当你把它找回来,它变得01:00,因为DST,因为这是时钟转向前一个小时。

2021-11-23 22:17:52

你是对的,谢谢你! 因为在这里解释说: torontooldnews.wordpress.com/2018/08/14/daylight-savings-time "1947年,1948年和1949年,对于一些原因,城市决定其钟前向和后在午夜,而不是凌晨2点"另请参见: timeanddate.com/time/change/canada/toronto?year=1949 但是,不应该转化为UTC给1949-04-24 04:00:00在这种情况下?
Leonard

根据我的理解是,在00:00(前DST开始),TZ偏UTC-5. 所以转让05:00. 当你把它找回来,系统采用UTC-4,因为我们知道,DST开始在加拿大/加拿大东部。
Gokhan Atil

谢谢你的澄清,@格克汗Atil! 它意义的。 1949-04-24 00:00:00不是一个有效的时间(不存在),因为它变成1949-04-24 01:00:00. 这同样适用于所有时间这两者之间的价值观。 因此,CONVERT_TIMEZONE函数转换正确。
Leonard

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................