Flocon de neige CONVERT_TIMEZONE bug?

0

La question

En Flocon de neige, lors de la conversion de certaines dates locales à l'UTC et ensuite de retour au fuseau horaire local à l'aide de CONVERT_TIMEZONE fonction, le résultat final est d'une heure. Par exemple:

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

Les résultats sont les suivants:

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

J'attends les deux DATE_LOCAL et DATE_LOCAL1 à l'identique, cependant DATE_LOCAL1 est d'une heure. Est-ce prévu? Ai-je raté quelque chose ou il y a un bug dans le CONVERT_TIMEZONE fonction?

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

La meilleure réponse

3

Ce n'est pas un bug. C'est à propos de l'Heure d'été (DST). En 1949, l'heure d'été a commencé le dimanche 24 avril, 00:00. Ainsi, lorsque vous convertir à l'UTC, Il devient 1949-04-24 05:00:00.0. Lorsque vous reconvertir, il devient 01:00 en raison de l'heure d'été, parce que c'est le temps que les horloges ont été transformés en avant une heure.

2021-11-23 22:17:52

Vous avez raison, merci! Comme expliqué ici: torontooldnews.wordpress.com/2018/08/14/daylight-savings-time "En 1947, 1948 et 1949, pour une raison quelconque, la ville a décidé de mettre les pendules de l'avant et à l'arrière, à minuit, au lieu de 2 h du matin," Voir aussi: timeanddate.com/time/change/canada/toronto?year=1949 Mais on ne devrait pas la conversion au format UTC donner 1949-04-24 04:00:00 dans ce cas?
Leonard

Selon ma compréhension, à 00:00 (avant l'heure d'été a commencé), le TZ décalage UTC-5. Ainsi, la conversion donne à 05:00. Lorsque vous convertissez en arrière, le système utilise UTC-4 comme nous savons que l'heure d'été a commencé sur le Canada et de l'est.
Gokhan Atil

Merci pour les précisions, @Gokhan Atil! Il fait sens aujourd'hui. 1949-04-24 00:00:00 est pas valide en temps (n'existe pas) car il devient de 1949-04-24 01:00:00. La même chose s'applique à tous les temps entre ces deux valeurs. Ainsi, la CONVERT_TIMEZONE fonction de la conversion correctement.
Leonard

Dans d'autres langues

Cette page est dans d'autres langues

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