เวลาที่ผ่านไปนับจาก Epoch
(aphyr.com)-
วินาทีนับจาก Epoch
-
เป็นที่ทราบกันโดยทั่วไปว่าเวลา POSIX หรือเวลา Unix หมายถึงจำนวนวินาทีหลังจากวันที่ 1 มกราคม 1970 00:00:00 แต่คำอธิบายนี้ไม่แม่นยำนัก ตัวอย่างเช่น เวลา POSIX ของ 25 ธันวาคม 2024 18:54:53 UTC คือ 1735152686 ซึ่งน้อยกว่าจำนวนวินาทีที่ผ่านไปจริง 1735152715 อยู่ 29 วินาที
-
เวลา POSIX ถูกนิยามต่อยอดจากเวลาสากลเชิงพิกัด (UTC) ใน IEEE 1003.1 มาตรฐานนี้สมมติว่าแต่ละวันมีความยาวเท่ากับ 86,400 วินาทีพอดี แต่ในความเป็นจริง ความยาวของหนึ่งวันไม่ได้เท่ากับ 86,400 วินาทีและเปลี่ยนแปลงไปตามกาลเวลา เพื่อชดเชยเรื่องนี้ นักดาราศาสตร์จึงประกาศเพิ่ม leap second ให้กับ UTC เป็นระยะ
-
-
โบราณคดี
-
ภาคผนวก B ของ IEEE 1003 มีการอภิปรายที่น่าสนใจเกี่ยวกับ leap second ในช่วงเวลาที่มาตรฐานฉบับนี้เผยแพร่ มีการเพิ่ม leap second ไปแล้ว 14 ครั้งนับจากวันที่ 1 มกราคม 1970 leap second เหล่านี้ถูกละเลยเพื่อให้คำนวณความต่างของเวลาได้ง่ายขึ้น
-
ระบบส่วนใหญ่มองว่าเวลาเป็นค่าที่เพิ่มขึ้นอย่างต่อเนื่อง แต่ระบบส่วนใหญ่ไม่ได้ติดตาม leap second และไม่ได้ซิงก์กับแหล่งอ้างอิงเวลามาตรฐาน ดังนั้นข้อกำหนดที่วินาทีนับจาก Epoch ต้องแสดงจำนวนวินาทีระหว่างเวลาที่อ้างอิงกับ Epoch ได้อย่างแม่นยำจึงไม่เหมาะสม
-
การตีความวินาทีนับจาก Epoch อย่างสอดคล้องกันอาจมีความสำคัญต่อแอปพลิเคชันแบบกระจายบางประเภท การสะสมของ leap second นั้นคาดการณ์ไม่ได้ และจำนวน leap second หลังจาก Epoch ก็มีแนวโน้มจะเพิ่มขึ้น
-
-
สิ่งที่ควรทำแทน
-
หากต้องการคำนวณระยะเวลาระหว่างสองเหตุการณ์บนคอมพิวเตอร์เครื่องเดียว ควรใช้
CLOCK_MONOTONICหากไม่จำเป็นต้องแลกเปลี่ยนเวลา POSIX กับระบบอื่น ก็สามารถใช้ TAI, GPS หรือ LORAN ได้ -
หากต้องการการจัดแนวโดยประมาณกับระบบ timestamp แบบ POSIX ก็สามารถกระจาย leap second ออกไปบนช่วงเวลาที่ยาวขึ้นได้ ไลบรารีอย่าง
qntmของt-a-iรองรับการแปลงระหว่าง POSIX กับ TAI -
ขณะนี้มีความพยายามที่จะยกเลิก leap second และหวังว่าจะเสร็จสิ้นภายในปี 2035 ซึ่งจะต้องมีงานเพิ่มในการสร้างตารางแปลงสำหรับทุกสิ่งที่ตั้งอยู่บนสมมติฐานว่า "หนึ่งวันมี 86,400 วินาที" แต่จะทำให้การถามหาจำนวนวินาทีระหว่างเวลาสองช่วงง่ายขึ้น อย่างน้อยก็สำหรับเวลาหลังปี 2035
-
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เคยอ่านนิยายวิทยาศาสตร์เรื่อง "A Deepness in the Sky" และรู้สึกว่าน่าสนใจกับการกล่าวถึงวินาทีหลัง epoch ในหนังสือ
มีความพยายามที่จะยกเลิก leap second และหวังว่าจะเสร็จสิ้นภายในปี 2035
"UTC epoch" สมัยใหม่คือวันที่ 1 มกราคม 1972
ทุกครั้งที่อ่านเรื่องการวัดเวลา ก็มักจะได้เรียนรู้อะไรใหม่ ๆ
ไม่นานมานี้ได้ทำงานกับโค้ดที่รันบน VAX หรือบน OpenVMS และเพิ่งเห็นเป็นครั้งแรกว่า epoch คือวันที่ 17 พฤศจิกายน 1858
มีบางช่วงเวลาที่ไม่สามารถแสดงเป็น POSIX timestamp ได้ และบาง POSIX timestamp ก็ไม่ตรงกับเวลาจริง
คิดว่าบทความนี้ทำลายคริสต์มาสไปแล้ว
เวลาเก็บวันที่ในฐานข้อมูล จะเก็บเป็น Unix epoch time เสมอ และเก็บข้อมูลเขตเวลาแยกต่างหาก
เมื่อประมาณ 10 ปีก่อน เคยได้ยินในงานประชุมว่า Google ไม่ใช้ leap second แต่กระจายมันออกไปในวินาทีปกติ
สงสัยว่ามีวิธีวัดเวลาที่ทั้งซิงก์กันและเพิ่มขึ้นแบบ monotonic หรือไม่