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) หรือทำซ้ำวินาทีนั้นเพื่อหลีกเลี่ยงการกระโดดของตัวนับ