อะไรคือเวลา Unix?
เวลา Unix (รู้จักกันในชื่อ Epoch time, POSIX time, หรือ Unix timestamp) เป็นระบบสำหรับอธิบายจุดเวลา มันคือจำนวนวินาทีที่ผ่านไปตั้งแต่ ยุค Unix ซึ่งกำหนดเป็น 00:00:00 UTC เมื่อวันพฤหัสบดีที่ 1 มกราคม 1970 มันถูกใช้อย่างแพร่หลายในระบบปฏิบัติการแบบ Unix และระบบคอมพิวเตอร์อื่น ๆ อีกมากมาย
ข้อได้เปรียบหลักของเวลา Unix คือความเรียบง่าย มันแสดงเวลาเป็นจำนวนเต็มเดียวที่เข้าใจได้ในระดับสากล ซึ่งเพิ่มขึ้นอย่างต่อเนื่อง ซึ่งทำให้เก็บข้อมูล เปรียบเทียบ และคำนวณเวลาสำหรับ timestamp ได้ง่ายมากโดยไม่ต้องกังวลเกี่ยวกับเขตเวลา เวลามาตรฐานกลาง หรือระบบปฏิทินที่แตกต่างกัน ตัวอย่างเช่น เพื่อหาความแตกต่างระหว่างสองเหตุการณ์ คุณเพียงแค่ลบ Unix timestamp ของพวกเขาออกจากกัน
แม้ว่าจำนวนเต็มนี้จะสมบูรณ์แบบสำหรับคอมพิวเตอร์ แต่ก็ไม่ค่อยเป็นมิตรกับมนุษย์ เพื่อเชื่อมช่องว่างนี้ นักพัฒนาและผู้สนใจเทคโนโลยีใช้เครื่องมือที่เรียกว่า เครื่องแปลง epoch คุณสามารถใช้มันเพื่อแปลง timestamp เป็นวันที่อ่านได้ง่าย หรือย้อนกลับโดยการหาค่า timestamp สำหรับวันที่เฉพาะเจาะจง
ปัญหา ปี 2038
ปัญหาที่รู้จักกันดีเกี่ยวกับเวลา Unix คือ "ปัญหา ปี 2038" ซึ่งคล้ายกับปัญหา Y2K ระบบนี้เป็นปัญหาที่เกิดขึ้นจากการที่หลายระบบคอมพิวเตอร์ในยุคแรกถูกออกแบบให้เก็บ Unix timestamp เป็น จำนวนเต็มแบบ signed 32 บิต ซึ่งจำนวนเต็มแบบ signed 32 บิตสามารถแทนค่าระหว่าง -2,147,483,648 ถึง 2,147,483,647 ได้
ค่าสูงสุด 2,147,483,647
จะถูกถึงใน 03:14:07 UTC ของวันที่ 19 มกราคม 2038 เมื่อถึงวินาทีถัดไป ตัวเลขจะล้นและวนกลับไปเป็นค่าลบมากที่สุด ซึ่งระบบจะตีความเป็นวันที่ในปี 1901 ซึ่งอาจทำให้เกิดความล้มเหลวในซอฟต์แวร์เก่าที่พึ่งพาการแทนค่าด้วยจำนวนเต็ม 32 บิตนี้
วิธีแก้คือใช้ จำนวนเต็ม 64 บิต เพื่อเก็บ timestamp ซึ่งจำนวนเต็ม 64 บิตมีค่าสูงสุดที่ใหญ่พอที่จะไม่ล้นในประมาณ 292 พันล้านปี ซึ่งเป็นการแก้ปัญหาในระยะยาว ระบบปฏิบัติการและซอฟต์แวร์สมัยใหม่ส่วนใหญ่ได้เปลี่ยนมาใช้การแทนค่าด้วยเวลา 64 บิตแล้ว
วินาทีอธิกสุรทินและเวลา Unix
รายละเอียดทางเทคนิคสำคัญคือ เวลา Unix ไม่รวมวินาทีอธิกสุรทิน ในขณะที่ UTC (เวลามาตรฐานสากล) บางครั้งจะเพิ่มวินาทีอธิกสุรทินเพื่อให้เวลาของเราอยู่ในแนวเดียวกับการหมุนของโลก แต่ timestamp ของ Unix จะเพิกเฉยและนับต่อเนื่องเป็นเส้นตรง
นั่นหมายความว่า เวลา Unix ไม่ใช่การแทนค่าที่แท้จริงของ UTC แต่เป็นการนับวินาทีแบบเส้นตรง เมื่อเกิดวินาทีอธิกสุรทิน เวลาของ Unix บางครั้งจะทำซ้ำวินาทีเพื่อให้สอดคล้องกัน ความแตกต่างนี้เป็นสิ่งสำคัญสำหรับการใช้งานทางวิทยาศาสตร์และความแม่นยำสูง แต่สำหรับการใช้งานทั่วไป ความแตกต่างนี้ถือว่าไม่สำคัญ
การใช้งานทั่วไปของเวลา Unix
- เวลาบันทึกไฟล์: ระบบปฏิบัติการใช้ Unix timestamps เพื่อติดตามเวลาที่ไฟล์ถูกสร้าง แก้ไข หรือเข้าถึงล่าสุด
-
ฐานข้อมูล:
เป็นวิธีที่นิยมและมีประสิทธิภาพในการเก็บข้อมูลวันที่และเวลาในบันทึก (เช่น
created_at
,updated_at
) - API และการพัฒนาเว็บไซต์: ใช้สำหรับการหมดอายุเซสชัน ควบคุมแคช และบันทึกคำขอ API
- การเขียนโปรแกรม: เกือบทุกภาษาโปรแกรมมีฟังก์ชันเพื่อดึงเวลาปัจจุบันในรูปแบบ Unix และแปลงเป็นและจากรูปแบบวันที่ที่อ่านได้ง่าย