เครื่องมือสำหรับนักพัฒนา · ตัวแปลงการประทับเวลา Unix
การประทับเวลาหนึ่งครั้ง สองนาฬิกา: เหตุใด UTC และเวลาท้องถิ่นจึงแตกต่างกันสำหรับหนึ่งยุค
· มันทำงานอย่างไร
การประทับเวลา เวลายูนิกซ์ โซนเวลา
ค่ายุคจะระบุถึงช่วงเวลาหนึ่ง แต่เวลานาฬิกาแขวนที่คุณเห็นนั้นขึ้นอยู่กับตำแหน่งที่คุณอยู่ โพสต์นี้จะอธิบายเลขคณิตออฟเซ็ต เหตุใดวันที่จึงอาจแตกต่างกัน และเหตุใดตัวแปลงจึงแสดงค่าที่อ่านได้ทั้งสองค่า
ลูกค้าบอกว่า 9 โมงเช้า บันทึกบอกว่า 16:00 — เหตุการณ์เดียวกัน สองนาฬิกา และตั๋วสนับสนุนที่ไม่ไปไหน
กรณีการสนับสนุนอาจหยุดชะงักเมื่อมีคนรายงาน "เก้าโมงเช้า" ในขณะที่บันทึกแอปพลิเคชันบันทึก 16:00 ป้ายนาฬิกาทั้งสองไม่สามารถระบุเหตุการณ์ได้จนกว่าจะทราบโซนหรือออฟเซ็ตของมัน หากการอ้างอิงทั้งสองมียุคเดียวกัน การค้นหาความล่าช้าในการประมวลผลเจ็ดชั่วโมงจะทำให้การตรวจสอบความแตกต่างของจอแสดงผลสูญเปล่า
เริ่มต้นด้วยการรวบรวมการประทับเวลาดิบและบริบทโซนของผู้สังเกตการณ์แต่ละคน ToolAcre แสดง UTC และการอ่านภายในเบราว์เซอร์ปัจจุบันจากการแปลงหนึ่งครั้ง ดังนั้นการเปรียบเทียบจึงเกิดขึ้นทันทีสำหรับบุคคลที่ถือบันทึก เพื่อนร่วมงานที่อื่นควรเปรียบเทียบค่า ISO ที่ใช้ร่วมกัน อย่าถือว่าแถวในเครื่องของคนแรกมีผลกับเครื่องของพวกเขา
ยุคเป็นเวลาชั่วขณะ ไม่ใช่เวลาแบบนาฬิกาแขวน — การนับวินาทีนับตั้งแต่ 1970 ที่ไม่มีโซนของตัวเอง
ยุคคือระยะห่างจาก 1970-01-01T00:00:00Z ในหน่วยวินาทีหรือมิลลิวินาที ไม่มีเมือง ธงออมแสง หรือสัญลักษณ์นาฬิกาที่ต้องการ ดังนั้นค่า 1,700,000,000 จึงระบุถึงช่วงเวลาหนึ่ง; ป้ายกำกับ เช่น เย็นวันอังคารหรือเช้าวันพุธ เป็นการฉายภาพหลังจากเลือกวิธีอ่านข้อความในขณะนั้นแล้ว
นี่คือเหตุผลว่าทำไมการจัดเก็บ “ยุคท้องถิ่น” ที่ถูกต้องจึงเป็นข้อผิดพลาดของหมวดหมู่ การเพิ่มออฟเซ็ตจะเปลี่ยนแปลงการนับและคะแนนในขณะอื่น จัดเก็บหรือส่ง Instant ต้นฉบับ จากนั้นใช้กฎการอ่านบริเวณขอบที่บุคคลต้องการปฏิทิน ToolAcre ติดตามรูปร่างนั้นโดยรักษาวินาทีที่เป็นตัวเลขและมิลลิวินาทีไว้ข้างเอาต์พุตที่จัดรูปแบบแล้ว
วิธีการใช้ออฟเซ็ต — การเพิ่มหรือลบชั่วโมงและนาที โซนครึ่งชั่วโมงและ 45 นาที และออฟเซ็ตที่เปลี่ยนแปลงในระหว่างปี
สำหรับออฟเซ็ตคงที่ เลขคณิตจะตรงไปตรงมา: UTC+09:00 แสดงนาฬิกาเร็วกว่า UTC เก้าชั่วโมง ในขณะที่ UTC−05:00 แสดงช้ากว่า 1 ห้าชั่วโมง เศษส่วนของชั่วโมงจะถูกจัดการเป็นนาที ดังนั้นการปัดเศษของเวลาสี่สิบห้านาทีจึงไม่สามารถแสดงได้อย่างปลอดภัยด้วยการปัดเศษเป็นจำนวนเต็มชั่วโมง ป้ายนี้เป็นของการอ่านในท้องถิ่นที่แสดง
ออฟเซ็ตคงที่ยังคงเป็นเพียงข้อสังเกตเดียวเท่านั้น ToolAcre ถาม Intl เกี่ยวกับออฟเซ็ตที่ใช้กับช่วงเวลาที่เลือกในโซนปัจจุบันของเบราว์เซอร์ ไม่ได้ถือว่าการชดเชยของวันนี้มีผลตลอดทั้งปี ดังนั้นการคัดลอกออฟเซ็ตหนึ่งรายการลงในการกำหนดค่าแอปพลิเคชันจึงอาจปรากฏว่าถูกต้องในระหว่างการทดสอบ และจะล้มเหลวเมื่อกฎที่เกี่ยวข้องของสภาพแวดล้อมเปลี่ยนแปลง
เมื่อวันที่เปลี่ยนแปลงเช่นกัน — ช่วงเวลาใกล้เที่ยงคืนซึ่งตรงกับวันตามปฏิทินที่แตกต่างกันใน UTC และในพื้นที่
เลขคณิตของนาฬิกาสามารถข้ามขอบเขตปฏิทินได้ ทันทีที่ 00:20 UTC จะปรากฏในวันที่ก่อนหน้าภายใต้ออฟเซ็ตติดลบ และต่อมาในวันที่เดียวกันภายใต้ค่าบวก ตั๋วที่บันทึกเฉพาะ "วันที่ 14" จึงสามารถอ้างอิงถึงส่วนต่างๆ ของบันทึก UTC แม้ว่าผู้เข้าร่วมทั้งสองจะจำปฏิทินของตนเองได้อย่างถูกต้องก็ตาม
ใช้วันที่ เวลา และออฟเซ็ตแบบเต็มเมื่อจัดกิจกรรมระหว่างทีม แถว ISO ของตัวแปลงจะป้องกันไม่ให้วันที่ถูกแยกออกจาก UTC ในขณะที่แถวในเครื่องจะให้บริบทที่คุ้นเคย หากเหตุการณ์เกิดขึ้นเป็นเวลาเที่ยงคืน ให้เรียงลำดับรายการตามยุคหรือ UTC แทนที่จะเรียงลำดับป้ายกำกับที่เขียนโดยมนุษย์ซึ่งเขียนในหลายโซน
ตัวอย่างการทำงาน: 1700000000 ใน UTC ใน UTC+9 โซน และใน UTC−5 โซน — เลขคณิตที่เขียนออกมาและวันที่ที่เปรียบเทียบ
บทความเกี่ยวกับหน่วยที่เผยแพร่ที่มีอยู่กำหนดว่า 1,700,000,000 วินาทีคือ `2023-11-14T22:13:20.000Z` ภายใต้การอ่าน +09:00 แบบคงที่ ให้เพิ่มเก้าชั่วโมงเพื่อรับ 2023-11-15 07:13:20; ภายใต้ค่าคงที่ 05:00 ลบห้าชั่วโมงเพื่อรับ 2023-11-14 17:13:20 วันที่เปลี่ยนเฉพาะในตัวอย่างตะวันออกเท่านั้น
การอ่านค่าชดเชยทั้งสองนี้เป็นการสาธิตทางคณิตศาสตร์ ไม่ใช่การกล่าวอ้างเกี่ยวกับเมืองที่มีชื่อในวันนั้น แถวในเครื่อง ToolAcre ควรได้รับอนุญาตให้รายงานการชดเชยการจัดหา Intl ใดๆ สำหรับโซนเบราว์เซอร์จริง เปรียบเทียบกับค่า UTC และจดบันทึกออฟเซ็ตที่แสดง แทนที่จะบังคับค่าที่แสดงไว้บนผลลัพธ์
ตัวอย่างการทำงาน: หนึ่งยุคใน UTC จากนั้นการอ่านค่าคงที่คงที่ที่ชัดเจนสองครั้ง
การแสดงค่าที่อ่านได้ทั้งสองค่าจะลบการลบทางจิตออกจากเซสชันการแก้ไขจุดบกพร่อง ทีมเซิร์ฟเวอร์สามารถเสนอราคา UTC ในขณะที่บุคคลที่สร้างปัญหาขึ้นมาใหม่สามารถจดจำนาฬิกาท้องถิ่นที่พวกเขาเห็นได้ เนื่องจากทั้งสองแถวมาจากวันที่เดียว วินาทีและมิลลิวินาทีที่ตรงกันจะพิสูจน์ได้ว่าไม่ได้แก้ไขหรือปัดเศษแยกกันเป็นเหตุการณ์ที่แยกจากกัน
คู่นี้มีประโยชน์อย่างยิ่งในการจับภาพหน้าจอ: รวมบันทึกหน่วยและแถว ISO แทนที่จะครอบตัดตามค่าท้องถิ่นที่คุ้นเคย นาฬิกาที่ครอบตัดสามารถตีความใหม่ได้หลังการเดินทางหรือการเปลี่ยนแปลงการตั้งค่าโซน ยุคบวก ISO ยังคงมีเสถียรภาพ และการเรนเดอร์ในเครื่องจะอธิบายประสบการณ์ผู้ใช้โดยไม่ต้องแทนที่การอ้างอิงที่เสถียรนั้น
สิ่งนี้ไม่ครอบคลุมถึง - การเปลี่ยนแปลงออฟเซ็ตในอดีตและการตัดสินใจเขตเวลาทางการเมือง ซึ่งอยู่ในฐานข้อมูล tz แทนที่จะเป็นเลขคณิต
การเพิ่มอย่างง่ายไม่สามารถอธิบายโซนภูมิภาคซึ่งมีออฟเซ็ตที่เกี่ยวข้องแตกต่างกันไป ตัวแปลงจะมอบหมายการจัดรูปแบบในเครื่องให้กับ Intl แต่พื้นที่เก็บข้อมูลจะไม่เปิดเผยตารางกฎพื้นฐานหรือการตัดสินใจในอดีต บทความนี้จึงไม่แสดงรายการการเปลี่ยนแปลงในอดีต คาดการณ์นโยบายในอนาคต หรือสัญญาว่าจะให้ผลลัพธ์ที่เหมือนกันจากกลไกที่มีข้อมูลต่างกัน
เมื่อแอปพลิเคชันต้องกำหนดเวลา “09:00 ในที่นี้” ให้คงโซนที่มีชื่อไว้และใช้การออกแบบการจัดกำหนดการแบบ Zone-Aware เมื่อต้องบันทึก "คำขอนี้เกิดขึ้นแล้ว" ให้คงไว้ทันที สิ่งเหล่านี้เป็นข้อกำหนดด้านข้อมูลที่แตกต่างกัน `+02:00` แบบคงที่สามารถอธิบายการอ่านได้ในทันทีโดยไม่ต้องระบุกฎระดับภูมิภาคที่ทำให้เกิดการอ่าน
เลขคณิตคงที่ไม่สามารถสร้างกฎภูมิภาคที่เปลี่ยนแปลงได้
ให้คิดว่ายุคนั้นเป็นเหมือนหมุดปักหมุดบนไทม์ไลน์ และหน้าปัดนาฬิกาเป็นเหมือนป้ายกำกับที่วางไว้รอบๆ UTC จัดหาป้ายกำกับทั่วไป การจัดรูปแบบในเครื่องช่วยให้สะดวก ToolAcre แสดงทั้งสองอย่างโดยไม่ต้องแก้ไขพิน ซึ่งเป็นเหตุผลว่าทำไมจึงคาดว่าจะมีความแตกต่างของชั่วโมงแทนที่จะเป็นหลักฐานของเวลาที่เสียไป
สำหรับเหตุการณ์ที่มีการโต้แย้ง ให้วางจำนวนดิบ ระบุหน่วยอย่างชัดเจน และแชร์เอาต์พุต ISO จากนั้นแนบการอ่านในท้องถิ่นเป็นคำอธิบายประกอบเท่านั้น ลำดับดังกล่าวจะเปลี่ยน "นาฬิกาของฉันเทียบกับนาฬิกาของคุณ" ให้เป็นแผนที่ที่ตรวจสอบได้ และป้องกันไม่ให้การเปลี่ยนแปลงขอบเขตวันที่ถูกปลอมแปลงเป็นเหตุการณ์ในแต่ละวัน