ไทย

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

วินาทีกระโดดและเวลา Unix: เหตุใดยุคจึงแสร้งทำเป็นว่าไม่มีอยู่จริง

· พื้นหลัง

การประทับเวลา เวลายูนิกซ์ โซนเวลา

ไทม์ไลน์ที่ก้าวโดยตรงจาก 23:59:59 ถึงเที่ยงคืน
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

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

วินาทีที่เกิดขึ้นสองครั้ง — 23:59:60 ในระบบหนึ่ง 23:59:59 ซ้ำในอีกระบบ และข้อผิดพลาดคีย์ซ้ำในเวลาเที่ยงคืน

ToolAcre ไม่สามารถสร้างแถว ISO ที่ลงท้ายด้วย `23:59:60` การทดสอบตั้งชื่อขอบเขตวินาทีกระโดดและคาดว่าค่ายุคหนึ่งจะจัดรูปแบบเป็น `2016-12-31T23:59:59.000Z` และค่าถัดไปเป็น `2017-01-01T00:00:00.000Z` ไม่มีวินาทีที่สามารถแสดงเพิ่มเติมได้ระหว่างพวกเขา

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

ระบบที่ต้องการป้ายกำกับเฉพาะสำหรับทุกวินาทีทางกายภาพจึงต้องการบริบทมากกว่าการแมป Unix-to-Date นี้ ตัวแปลงไม่สามารถผลิตฉลากที่โมเดลละเว้นได้

ToolAcre พิสูจน์ว่าไม่มีตัวแทน 23:59:60; มันไม่ได้บันทึกเหตุการณ์ที่มีคีย์ซ้ำกัน

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

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

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

เหตุผลทางกายภาพสำหรับวินาทีกระโดดต้องใช้แหล่งที่มาภายนอกพื้นที่เก็บข้อมูลนี้

โมเดลที่นำไปใช้จะมีพฤติกรรมเหมือนกับว่าวันพลเรือนบนแกนมี 86,400 เลข Unix วินาที อินพุตจำนวนเต็มติดต่อกันแตกต่างกันหนึ่งวินาที รวมถึงข้ามขอบเขตปี 2016 ด้วย `fromEpoch` คูณแต่ละรายการด้วย 1,000 และวันที่จัดรูปแบบการนับมิลลิวินาทีผลลัพธ์

การเรียกวินาทีอธิกสุรทินแบบ "เพิกเฉย" นี้อธิบายถึงผลลัพธ์ที่สังเกตได้: ไม่มีการแมปค่า Unix ที่ไม่ซ้ำกันกับป้ายกำกับ `:60` ไม่ได้หมายความว่านาฬิกาเครื่องจักรทุกเครื่องจะก้าวหน้าเหมือนกันในระหว่างการแทรกจริง ตัวแปลงยอมรับการนับ มันไม่ได้สุ่มตัวอย่างหรือควบคุมนาฬิกาของโฮสต์

เลขคณิตในช่วงที่ใหญ่กว่านั้นเป็นไปตามหลักการเดียวกัน ดังนั้นการลบค่า Unix สองค่าจะวัดความแตกต่างการนับสไตล์ POSIX แทนที่จะสร้างป้ายกำกับกระโดดที่ละเว้นขึ้นมาใหม่

Conversion ที่ทดสอบไม่มีป้ายกำกับวินาทีกระโดดระหว่างค่ายุคที่ต่อเนื่องกัน

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

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

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

พฤติกรรมของขั้นตอนสัญญาณนาฬิกาและสเมียร์เป็นลักษณะเฉพาะของแพลตฟอร์มและยังไม่ได้รับการยืนยันที่นี่

ป้อน 1,483,228,799 วินาที: ผลลัพธ์ ISO ที่ยืนยันแล้วคือ `2016-12-31T23:59:59.000Z` เพิ่มอินพุตหนึ่งครั้งเป็น 1,483,228,800: ผลลัพธ์คือ `2017-01-01T00:00:00.000Z` การลบจำนวนเต็มจะได้ค่าหนึ่ง ซึ่งตรงกับความก้าวหน้าที่แสดงในแบบจำลองนี้

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

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

ตัวอย่างการทำงาน: ขอบเขต 2016 ที่ทดสอบแล้วของที่เก็บ

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

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

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

มตินโยบายในอนาคตจะถูกละเว้นโดยไม่มีแหล่งที่มาที่เชื่อถือได้

TAI, GPS และสเกลอื่นๆ สามารถแสดงเวลาที่แตกต่างกัน แต่ ToolAcre ไม่มีตัวเลือกหรือตารางออฟเซ็ตสำหรับสิ่งเหล่านี้ การวางการนับเป็นวินาทีของ Unix เป็นเพียงการใช้การตีความสไตล์ 1970 POSIX เท่านั้น ผลลัพธ์ที่อ่านได้ยังคงอาจผิดความหมายได้

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

การไม่มีโหมดจะปรากฏในตัวเลือกหน่วยทั้งสามของ UI ไม่มีการเปลี่ยนแปลงมาตราส่วนเวลา อัตโนมัติเพียงเลือกระหว่างความละเอียด Unix สองอัน

มาตราส่วนเวลาอื่นอยู่นอกเหนือการใช้งานตัวแปลง Unix นี้

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

เมื่อความแม่นยำใกล้กับการจัดการแบบก้าวกระโดดมีความสำคัญ การแปลงเป็นขั้นตอนการนำเสนอสุดท้าย ไม่ใช่แหล่งที่มาของหลักฐาน รวบรวมเอกสารประกอบระดับนาฬิกา พฤติกรรมการซิงโครไนซ์ และฟิลด์เหตุการณ์ดิบก่อน ToolAcre จะสามารถแสดงความหมายของการนับ Unix ที่ประกาศภายใต้โมเดลที่ทดสอบ

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