Fiocco di neve CONVERT_TIMEZONE bug?

0

Domanda

In Fiocco di neve, quando la conversione di alcuni locali di date per ora UTC e poi di nuovo fuso orario locale utilizzando CONVERT_TIMEZONE funzione, il risultato finale è spento per un'ora. Per esempio:

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

I risultati sono:

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

Mi aspetto che sia DATE_LOCAL e DATE_LOCAL1 essere identici, tuttavia DATE_LOCAL1 è di un'ora. Questo è previsto? Mi manca qualcosa o c'è un bug nel CONVERT_TIMEZONE funzione?

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

Migliore risposta

3

Questo non è un bug. Questo è circa l'Ora legale (DST). Nel 1949, l'ora legale è partita domenica, 24 aprile, ore 00:00. Così, quando si converte UTC, diventa 1949-04-24 05:00:00.0. Quando si converte di nuovo, diventa 01:00 a causa dell'ora legale, perché è il tempo che gli orologi erano rivolte in avanti di un'ora.

2021-11-23 22:17:52

Hai ragione, grazie! Come spiegato qui: torontooldnews.wordpress.com/2018/08/14/daylight-savings-time "Nel 1947, 1948 e 1949, per qualche motivo, la città ha deciso di impostare i suoi orologi in avanti e indietro a mezzanotte invece che alle 2 di notte i" Vedi anche: timeanddate.com/time/change/canada/toronto?year=1949 Ma non la conversione UTC dare 1949-04-24 04:00:00 in questo caso?
Leonard

Secondo la mia comprensione, alle 00:00 (prima dell'ora legale avviato), il TZ offset UTC-5. Per questo la conversione dà 05:00. Quando si converte nuovamente, il sistema usa UTC-4, come sappiamo che l'ora legale avviato nel Canada Orientale.
Gokhan Atil

Grazie per il chiarimento, @Gokhan Atil! Ha senso ora. 1949-04-24 00:00:00 non è un tempo valido (non esiste) in quanto diventa 1949-04-24 01:00:00. Lo stesso vale per tutti i tempi tra questi due valori. Così, il CONVERT_TIMEZONE funzione correttamente la conversione.
Leonard

In altre lingue

Questa pagina è in altre lingue

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