บทความทั้งหมด

Unix time: เหตุใดคอมพิวเตอร์จึงนับเวลาตั้งแต่ปี 1970

Unix time (Unix timestamp) คือจำนวนวินาทีที่ผ่านไปตั้งแต่วันที่ 1 มกราคม 1970 เวลา 00:00:00 UTC วันที่นี้เรียกว่า "Unix epoch" และเป็นจุดอ้างอิงที่ระบบปฏิบัติการ ฐานข้อมูล และภาษาโปรแกรมสมัยใหม่แทบทุกตัวใช้นับเวลา

เหตุใดต้องเป็นปี 1970

วันที่นี้ไม่ได้ถูกเลือกเพราะเหตุการณ์พิเศษใด ๆ แต่ด้วยเหตุผลด้านความเป็นจริงล้วน ๆ: นักพัฒนา Unix ที่ Bell Labs ในช่วงต้นทศวรรษ 1970 เพียงแค่นำปีปัจจุบันในตอนนั้นมาเป็นจุดเริ่มต้นที่กลมและสะดวก ไม่มีความหมายลึกซึ้งใด ๆ อยู่เบื้องหลังวันที่นี้

เหตุใดรูปแบบนี้จึงพบได้ทั่วไปในโรงงานอุตสาหกรรม

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

ปัญหาปี 2038

ระบบเก่าจำนวนมากเก็บ Unix time เป็นจำนวนเต็มแบบมีเครื่องหมาย 32 บิต ซึ่งสามารถแทนค่าได้ถึงวันที่ 19 มกราคม 2038 เท่านั้น หลังจากวันที่นั้น ตัวเลขแบบนี้จะล้น — นี่ไม่ใช่แค่ปัญหาทางทฤษฎี เพราะเครื่องจักรอุตสาหกรรมและอุปกรณ์ฝังตัวรุ่นเก่าจำนวนมากยังทำงานอยู่หลายสิบปีโดยไม่มีการอัปเดตเฟิร์มแวร์

ทำไมต้องใช้สิ่งนี้

  • แปลง timestamp จาก log หรือการตอบกลับ API เป็นวันที่และเวลาที่เข้าใจได้
  • คำนวณผลต่างระหว่างสองช่วงเวลาโดยไม่ต้องคำนวณปฏิทินด้วยมือ
  • วินิจฉัยปัญหาที่เกี่ยวข้องกับเขตเวลาเมื่อทำงานกับ timestamp

เวลา Unix กับวินาทีอธิกสุรทิน (leap seconds)

เวลา Unix ถือว่าแต่ละวันมี 86400 วินาทีเสมอ โดยไม่นับวินาทีอธิกสุรทิน (leap seconds) ที่บางครั้งถูกเพิ่มเข้าไปใน UTC เพื่อชดเชยการหมุนของโลกที่ช้าลง ซึ่งหมายความว่าเวลา Unix ในทางเทคนิคไม่ได้สะท้อน UTC อย่างแม่นยำในช่วงเวลาที่มีการเพิ่มวินาทีอธิกสุรทิน — ระบบส่วนใหญ่จะ "กระจาย" (smear) หรือทำซ้ำวินาทีนั้นเพื่อหลีกเลี่ยงการกระโดดของตัวนับ

ลองใช้เครื่องมือ