ไทย

เครื่องมือสำหรับนักพัฒนา · ตัวแปลงการประทับเวลา Unix

เขตเวลาไม่มีการชดเชย: ฐานข้อมูล IANA tz และเหตุใดจึงสำคัญ

· พื้นหลัง

การประทับเวลา โซนเวลา เบราว์เซอร์-apis

เส้นทางโซนที่มีชื่อซึ่งสร้างออฟเซ็ตที่แตกต่างกันสำหรับสองช่วงเวลา
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

ออฟเซ็ตคือตัวเลข เขตเวลาคือประวัติของตัวเลขและกฎเกณฑ์เมื่อมีการเปลี่ยนแปลง โพสต์นี้จะอธิบายความแตกต่าง แนะนำฐานข้อมูล IANA tz ที่เข้ารหัส และแสดงให้เห็นว่าเหตุใดผู้แปลงจึงพึ่งพาฐานข้อมูลดังกล่าวสำหรับการอ่านในท้องถิ่น

การประชุมที่เลื่อนไปหนึ่งชั่วโมง — ค่าชดเชยที่เก็บไว้คือ +02:00 ที่ถูกในเดือนกรกฎาคมและผิดในเดือนธันวาคม

`+02:00` แบบคงที่ที่บันทึกไว้ข้างการประชุมในเดือนกรกฎาคมอาจเป็นการอ่านที่เที่ยงตรงในขณะนั้นและยังคงล้มเหลวตามกฎของเดือนธันวาคม การชดเชยคือผลลัพธ์เดียว โซนคือบริบทของกฎที่สามารถสร้างผลลัพธ์ในวันที่ต่างกันได้ การจัดเก็บอันหนึ่งราวกับว่าเป็นอีกอันหนึ่งจะทำให้สแนปชอตค้าง

แถวท้องถิ่นของ ToolAcre ขอให้ Intl จัดรูปแบบวันที่แต่ละวัน และขอออฟเซ็ตตัวเลขสั้นๆ มันไม่ได้เพิ่มค่าคงที่การกำหนดค่าให้กับยุค การออกแบบดังกล่าวช่วยให้กฎที่บังคับใช้ของสภาพแวดล้อมมีอิทธิพลต่อทุกช่วงเวลาแยกจากกัน

ออฟเซ็ตเทียบกับโซน — ระยะทางคงที่จาก UTC เทียบกับภูมิภาคที่ตั้งชื่อด้วยกฎ DST และประวัติการเปลี่ยนแปลง

ออฟเซ็ตระบุว่านาฬิกาที่เรนเดอร์อยู่ห่างจาก UTC แค่ไหนในคราวเดียว ภูมิภาคที่มีชื่อสามารถมีลำดับของกฎออฟเซ็ตและการเปลี่ยนแปลงในอดีตได้ ยุคสมัยเองก็ไม่มีเช่นกัน แนวคิดเหล่านี้ควรใช้ฟิลด์แยกต่างหากเมื่อแอปพลิเคชันต้องการทั้งกิจกรรมและกำหนดการตามสถานที่

สำหรับเหตุการณ์ที่ไม่เปลี่ยนรูป การจัดเก็บ Instant อาจเพียงพอแล้ว สำหรับ “เปิดที่ 09:00 ในภูมิภาคนี้ทุกวัน” ให้คงโซนที่มีชื่อไว้ เนื่องจากอินสแตนซ์ในอนาคตจะต้องได้รับการแก้ไขจากเวลาวอลล์ การใช้ออฟเซ็ตของเมื่อวานซ้ำจะถือว่ากฎไดนามิกเป็นคุณสมบัติตัวเลขถาวร

ฐานข้อมูล IANA tz — ชื่อ Area/City เหตุใดจึงเป็นบันทึกการตัดสินใจทางการเมือง และความถี่ในการอัปเดต

สมุดงานชื่อฐานข้อมูล IANA ที่มาทางการเมือง และความถี่ในการอัปเดต การใช้งานรายงานชื่อโซนสไตล์ IANA จาก `resolvedOptions()` แต่ไม่เปิดเผยเวอร์ชันฐานข้อมูล กำหนดการอัพเดต หรือแพ็คเกจต้นทาง รายละเอียดเหล่านั้นไม่ได้ระบุไว้ที่นี่

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

แอปพลิเคชันที่ต้องการเอาต์พุตในอดีตที่ทำซ้ำได้ควรควบคุมการขึ้นต่อกันของข้อมูลโซนและวันที่ของตัวแทนการทดสอบ การใช้สภาพแวดล้อมเบราว์เซอร์ที่ไม่ระบุจะมอบความสามารถในการทำซ้ำนั้น

แหล่งที่มาของกฎโซนที่มีชื่อและจังหวะการอัปเดตจะไม่ถูกเปิดเผยโดยการใช้งานนี้

ToolAcre ถามเบราว์เซอร์เกี่ยวกับโซนท้องถิ่นและรูปแบบผ่านสนามบินนานาชาติ พื้นที่เก็บข้อมูลไม่ได้กำหนดว่ากฎมาจากระบบปฏิบัติการ บันเดิลเบราว์เซอร์ หรือส่วนประกอบรันไทม์อื่นหรือไม่ โดยจะตรวจจับความล้มเหลวและถอยกลับอย่างปลอดภัย แทนที่จะเปิดเผยสถาปัตยกรรมภายในนั้น

ดังนั้น "ท้องถิ่น" หมายถึงสภาพแวดล้อมที่เบราว์เซอร์เลือก ณ เวลาที่เกิด Conversion การเปลี่ยนการตั้งค่าอุปกรณ์สามารถเปลี่ยนเอาต์พุตได้โดยไม่ต้องเปลี่ยนยุค สำหรับเส้นทางการตรวจสอบ ให้คง UTC และจำนวนดิบไว้ ใช้การแสดงผลในเครื่องเป็นบริบทมากกว่าที่เก็บข้อมูลตามรูปแบบบัญญัติ

ทางเลือกสำรองไปที่ ISO เมื่อตัวจัดรูปแบบล้มเหลวจะคงไว้ชั่วคราว แต่จะสูญเสียการนำเสนอในเครื่องที่ร้องขอ ผู้บริโภคควรถือว่าสิ่งนั้นเป็นบริบทการแสดงผลที่ลดลง ไม่ใช่วันที่เปลี่ยนแปลง

เบราว์เซอร์เลือกและจัดรูปแบบโซนท้องถิ่น ไม่มีการยืนยันแหล่งที่มาของกฎ

เลือก UTC สองครั้งที่ห่างกันหกเดือน เช่น `2025-01-15T12:00:00Z` และ `2025-07-15T12:00:00Z` แปลงเป็นวินาที และตรวจสอบแถวในตัวเครื่องบนอุปกรณ์เครื่องเดียว บันทึกว่าออฟเซ็ตตัวเลขแตกต่างกันหรือไม่ การสังเกตนี้ใช้ได้กับโซนและสภาพแวดล้อมที่แสดง

เวิร์กบุคกำหนดออฟเซ็ต Europe/Berlin แต่กฎโซนที่มีชื่อเหล่านั้นไม่ได้อ่านจากการใช้งาน แบบฝึกหัดที่ทำซ้ำได้นี้จะช่วยหลีกเลี่ยงตารางที่ไม่ได้รับการสนับสนุน ในขณะเดียวกันก็สอนความแตกต่างแบบเดียวกัน: การสืบค้นโซนเดียว สองอินสแตนซ์ และอาจชดเชยผลลัพธ์สองรายการ

หากออฟเซ็ตตรงกัน การสังเกตยังคงเป็นข้อมูล: โซนที่กำหนดค่านั้นไม่ได้เปิดเผยความแตกต่างตามฤดูกาลในช่วงเวลาที่เลือกในสภาพแวดล้อมนั้น

ตัวอย่างการทำงาน: สังเกตโซนเบราว์เซอร์หนึ่งโซนในวันที่สองวัน แทนที่จะใช้กฎเบอร์ลินแบบฮาร์ดโค้ด

แผงร้องขอ `timeZoneName: "shortOffset"` ซึ่งสนับสนุนความสัมพันธ์ที่เป็นตัวเลข เช่น GMT+1 มากกว่าตัวย่อระดับภูมิภาค ตัวเลือกดังกล่าวช่วยลดการพึ่งพาป้ายกำกับที่ความหมายอาจแตกต่างกันไปตามบริบท แม้ว่าการจัดรูปแบบ International ที่แน่นอนจะยังคงเป็นผลลัพธ์ของแพลตฟอร์มก็ตาม

สำหรับข้อมูลที่จัดเก็บ ให้ใช้ตัวระบุโซน Canonical ที่กำหนดโดยไลบรารีที่เลือกของแอปพลิเคชัน แทนที่จะแสดงตัวย่อ ป้ายกำกับแบบสั้นที่ผู้ใช้เห็นอาจมีประโยชน์ แต่ไม่ควรกลายเป็นกุญแจสำคัญในการสร้างกำหนดการใหม่ในอนาคต

ออฟเซ็ตตัวเลขยังคงเป็นเลขคณิตที่ชัดเจนในคราวเดียว ข้อจำกัดของพวกเขาคือไม่มีข้อมูลระบุตัวตนของกฎ ไม่ใช่ไม่สามารถแมปนาฬิกาหนึ่งนาฬิกาที่อ่านกลับไปที่ UTC

หลีกเลี่ยงการใช้คำย่อในข้อมูลที่จัดเก็บ ตัวจัดรูปแบบขอออฟเซ็ตตัวเลขแบบสั้น

การจัดกำหนดการในอนาคตจำเป็นต้องมีช่องว่าง การทับซ้อนกัน และการจัดการนโยบายที่ตัวแปลงนี้ไม่มีให้ เริ่มต้นด้วยวันที่หรือยุคที่ได้รับการแก้ไขแล้วจึงแสดงผล จะไม่เลือกระหว่างเวลาท้องถิ่นที่ซ้ำกันสองครั้งหรือซ่อมแซมเวลาท้องถิ่นที่ไม่มีอยู่

ใช้ไลบรารีการจัดกำหนดการแบบ Zone-Aware ซึ่งมีการทดสอบพฤติกรรมตามความต้องการของคุณ จากนั้นตรวจสอบเหตุการณ์ที่แก้ไขแล้วที่นี่หากมีประโยชน์ การแยกความละเอียดออกจากจอแสดงผลทำให้ตัวแปลงธรรมดาไม่กลายเป็นตัวกำหนดตารางเวลาโดยไม่ได้ตั้งใจด้วยนโยบาย Edge ที่ไม่ได้กำหนดไว้

เอาต์พุตของตัวกำหนดตารางเวลาสามารถจัดเก็บเป็นยุคสำหรับการดำเนินการในขณะที่ยังคงรักษาโซนและจุดประสงค์ของเวลาวอลล์ดั้งเดิมสำหรับการคำนวณใหม่หรือการอธิบายในอนาคต

Takeaway: จัดเก็บ Instants เป็นยุค, จัดเก็บสถานที่เป็นชื่อโซน - และวิธีที่ตัวแปลงการประทับเวลา Unix ใช้โซนของเบราว์เซอร์ของคุณสำหรับการอ่านในเครื่อง

จัดเก็บ Instants เป็นหน่วย Epoch ที่ชัดเจนหรือสตริง UTC ตามรูปแบบบัญญัติ และจัดเก็บโซนที่มีชื่อเมื่อสถานที่นั้นมีความสำคัญ ออฟเซ็ตสามารถมาพร้อมกับเอาต์พุตสำหรับคำอธิบาย แต่ไม่สามารถใช้ทดแทนฟิลด์ใดฟิลด์หนึ่งได้ UTC ของ ToolAcre และแถวท้องถิ่นแสดงให้เห็นถึงการแยกดังกล่าว

เมื่อผลลัพธ์ในพื้นที่ทำให้คุณประหลาดใจ ให้ตรวจสอบป้ายกำกับโซน ทันทีและชดเชยก่อนที่จะเปลี่ยนแปลงข้อมูล แพตช์ชดเชยคงที่อาจทำให้วันที่หนึ่งดูถูกและอีกวันผิด รุ่นที่ทนทานช่วยให้เหตุการณ์มีเสถียรภาพและให้กฎโซนที่ได้รับการตรวจสอบแล้วจัดหาหน้าปัดนาฬิกา

โมเดลนี้ยังรองรับการเดินทาง: ผู้ใช้สามารถดูทันทีที่จัดเก็บไว้ในโซนท้องถิ่นใหม่โดยไม่ต้องเขียนเหตุการณ์ใหม่หรือสูญเสียบริบทการจัดกำหนดการดั้งเดิม