เกล็ดหิมะ CONVERT_TIMEZONE แมลง?

0

คำถาม

ในเกล็ดหิมะตอนที่กำลังทำการแปลงบางอย่าท้องถิ่นวันที่ต้อง UTC และจากนั้นกลับไปที่เขตเวลาท้องถิ่นโดยใช้ CONVERT_TIMEZONE ฟังก์ชันจุดจบผลลัพธ์ที่ได้จากหนึ่งชั่วโมง สำหรับตัวอย่าง:

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

ได้ผลลัพธ์:

DATE_LOCAL DATE_UTC DATE_LOCAL1
1949-04-24 00:00:00.0 1949-04-2405:00:00.0 1949-04-24 01:00:00.0

ฉันคาดหวังทั้งสอง DATE_LOCAL และ DATE_LOCAL1 จะเป็นเหมือนกันอย่างไรก็ตาม DATE_LOCAL1 เป็นเวลาหนึ่งชั่วโมงนะ นี่คือคาดหวัง? ฉันพลาดอะไรไปหรือมีข้อผิดพลาดของ CONVERT_TIMEZONE ฟังก์ชัน?

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

คำตอบที่ดีที่สุด

3

นี่ไม่ใช่ข้อผิดพลาด นี่เกี่ยวกับตอนกลางวันไม่ใช่ช่วงเวลา(DST). ใน 1949,DST เริ่มต้นในวันอาทิตย์ 24 เอพริล 00:00. ดังนั้นเมื่อคุณแปลงมันจะ UTC มันจะกลายเป็น 1949-04-2405:00:00.0. ตอนที่คุณแปลงมันกลับมา,มันจะกลายเป็น 01:00 เพราะ DST เพราะมันเป็นเวลาที่นาฬิกาอถูกเปลี่ยนไปข้างหน้าหนึ่งชั่วโมง

2021-11-23 22:17:52

คุณพูดถูก,ขอบคุณ! เหมือธิบายได้ที่นี่: torontooldnews.wordpress.com/2018/08/14/daylight-savings-time "ใน 1947,1948 และ 1949 สำหรับเหตุผลบางอย่างในเมืองตัดสินใจที่จะตั้งค่าของมันนาฬิกาเดินหน้าและกลับมาตอนเที่ยงคืนแทนที่จะเป็น 2 ชั่วโมง"เห็นด้ว: timeanddate.com/time/change/canada/toronto?year=1949 แต่ไม่ควรในการแปลงไป UTC ให้ 1949-04-2404:00:00 ในกรณีนี้?
Leonard

ตามข้อมูลคนของผมความเข้าใจในตอน 00:00(ก่อนที่ DST เริ่มต้น)ที่ TZ ออฟเซ็ตเป็น UTC-5. ดังนั้นการแปลงให้ 05:00. ตอนที่คุณแปลงมันกลับไปที่ระบบใช้ UTC-4 อย่างที่เรารู้ว่า DST นเริ่มเรื่องแคนาดา/ฝั่งตะวันออก.
Gokhan Atil

ขอบคุณที่ช่วยทำให้ชัดเจน,@Gokhan Atil! มันสมเหตุสมผลตอนนี้ 1949-04-2400:00:00 ไม่ใช่ที่ถูกต้องเวลา(ไม่มีตัวตน)ตั้งแต่มันจะกลายเป็น 1949-04-2401:00:00. เหมือนนี้ใช้สำหรับทุกครั้งระหว่างสองคนนี้ค่า. ดังนั้นที่ CONVERT_TIMEZONE ฟังก์ชันที่ทำการแปลงอย่างถูกต้อง
Leonard

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่