Snowflake CONVERT_TIMEZONE chyba?

0

Otázka

V Snowflake, pri prevode niektorých miestnych dátumy UTC a potom späť na miestne časové pásmo pomocou CONVERT_TIMEZONE funkciu, konečný výsledok je vypnuté o jednu hodinu. Napríklad:

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

Výsledky sú:

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

Očakávam, že obe DATE_LOCAL a DATE_LOCAL1 byť identické, avšak DATE_LOCAL1 je jedna hodina off. Je to očakáva? Som niečo chýba, alebo je chyba v CONVERT_TIMEZONE funkciu?

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

Najlepšiu odpoveď

3

Toto nie je chyba. To je o Letný čas (letný Čas). V roku 1949, DST sa začala v nedeľu, 24. apríla, 00:00. Takže keď si ho previesť na UTC, stáva Sa 1949-04-24 05:00:00.0. Keď ho previesť späť, to sa stáva 01:00, pretože letného času, pretože je to čas, aby hodiny boli obrátil hodinu dopredu.

2021-11-23 22:17:52

Máte pravdu, ďakujem! Ako je vysvetlené tu: torontooldnews.wordpress.com/2018/08/14/daylight-savings-time "V roku 1947, 1948 a 1949, z nejakého dôvodu, mesto sa rozhodol svoje hodiny dopredu a dozadu o polnoci namiesto 2 hod." Pozri aj: timeanddate.com/time/change/canada/toronto?year=1949 Ale nemali by táto konverzia UTC dať 1949-04-24 04:00:00 v tomto prípade?
Leonard

Podľa môjho chápania, na 00:00 (pred letný čas začal), TZ posun vo i UTC-5. Takže konverzia dáva 05:00. Keď ho previesť späť, sa systém používa UTC-4, ako vieme, že letný čas začal na Kanadu/Východná.
Gokhan Atil

Ďakujem za objasnenie, @Gokhan Atil! To dáva zmysel teraz. 1949-04-24 00:00:00 nie je platný čas (neexistuje), keďže sa stáva 1949-04-24 01:00:00. To isté platí aj pre všetky časy medzi tieto dve hodnoty. Teda, CONVERT_TIMEZONE funkcia sa konverzie správne.
Leonard

V iných jazykoch

Táto stránka je v iných jazykoch

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