Copo de nieve CONVERT_TIMEZONE error?

0

Pregunta

En Copo de nieve, cuando la conversión de algunas fechas locales a la hora UTC y luego de regreso a la zona horaria local utilizando CONVERT_TIMEZONE función, el resultado final es que fuera una hora. Por ejemplo:

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

Los resultados son:

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

Espero que tanto DATE_LOCAL y DATE_LOCAL1 a ser idénticos, sin embargo DATE_LOCAL1 es una hora de descanso. Es esta espera? Me estoy perdiendo algo o hay un error en el CONVERT_TIMEZONE función?

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

Mejor respuesta

3

Esto no es un error. Esto es sobre el Horario de verano (DST). En 1949, el horario de verano comenzó el domingo, 24 de abril, a las 00:00. Así que cuando se convierte en UTC, Se convierte en 1949-04-24 05:00:00.0. Cuando se convierte de nuevo, se vuelve 01:00, ya que de horario de verano, porque es el momento en que los relojes se convirtieron adelanta una hora.

2021-11-23 22:17:52

Tienes razón, gracias! Como se explica aquí: torontooldnews.wordpress.com/2018/08/14/daylight-savings-time "En 1947, 1948 y 1949, por alguna razón, la ciudad decidió poner sus relojes hacia adelante y hacia atrás a la medianoche en lugar de las 2 de la mañana" Vea también: timeanddate.com/time/change/canada/toronto?year=1949 Pero no el de la conversión a UTC dar 1949-04-24 04:00:00 en este caso?
Leonard

De acuerdo a mi entendimiento, a las 00:00 (antes de que el DST comenzó a), el desplazamiento TZ es UTC-5. Así que la conversión da a las 05:00. Cuando se convierte de nuevo, el sistema utilizará UTC-4 como sabemos que el DST comenzó en Canadá/Oriental.
Gokhan Atil

Gracias por la aclaración, @Gokhan Atil! Tiene sentido ahora. 1949-04-24 00:00:00 no es un tiempo de validez (no existe), ya que se convierte en 1949-04-24 01:00:00. Lo mismo se aplica a todos los tiempos entre estos dos valores. Por lo tanto, la CONVERT_TIMEZONE función de la conversión correctamente.
Leonard

En otros idiomas

Esta página está en otros idiomas

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