Snowflake CONVERT_TİMEZONE hatası mı?

0

Soru

Snowflake'de, bazı yerel tarihleri utc'ye ve ardından CONVERT_TİMEZONE işlevini kullanarak yerel saat dilimine dönüştürürken, sonuç bir saat kapalıdır. Örneğin:

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

Sonuçlar:

TARİH_YEREL TARİH_UTC TARİH_LOCAL1
1949-04-24 00:00:00.0 1949-04-24 05:00:00.0 1949-04-24 01:00:00.0

Hem DATE_LOCAL hem de DATE_LOCAL1'İN aynı olmasını bekliyorum, ancak DATE_LOCAL1 bir saat kapalı. Bu bekleniyor? Bir şey mi kaçırıyorum yoksa CONVERT_TİMEZONE işlevinde bir hata mı var?

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

En iyi cevabı

3

Bu bir böcek değil. Bu Gün ışığından Yararlanma Saati (DST) hakkındadır. 1949'da DST, 24 Nisan Pazar günü saat 00:00'da başladı. Yani utc'ye dönüştürdüğünüzde, 1949-04-24 05:00:00.0 olur. Geri dönüştürdüğünüzde, saatlerin bir saat ileri çevrildiği saat olduğundan DST nedeniyle saat 01:00 olur.

2021-11-23 22:17:52

Haklısın, teşekkür ederim! Burada anlatıldığı gibi: torontooldnews.wordpress.com/2018/08/14/daylight-savings-time "İçinde 1947, 1948, 1949, nedense, şehrin karar için ayarlanmış saatlerin ileri ve geri gece yarısına yerine 2'de" Ayrıca Bkz: timeanddate.com/time/change/canada/toronto?year=1949 Ama gerekmez miydi dönüşüm UTC ver 1949-04-24 04:00:00 bu durumda?
Leonard

Anladığım kadarıyla, 00: 00'da (DST başlamadan önce), TZ ofseti UTC-5'tir. Yani dönüşüm 05: 00 veriyor. Geri dönüştürdüğünüzde, sistem UTC - 4'ü kullanır, çünkü dst'nin Kanada/Doğu'da başladığını biliyoruz.
Gokhan Atil

Açıklama için teşekkürler, @ Gokhan Atil! Şimdi mantıklı. 1949-04-24 00:00:00, 1949-04-24 01:00:00 olduğu için geçerli bir saat değildir (mevcut değildir). Aynısı, bu iki değer arasındaki tüm zamanlar için de geçerlidir. Böylece, CONVERT_TİMEZONE işlevi dönüşümü doğru yapar.
Leonard

Diğer dillerde

Bu sayfa diğer dillerde

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