Epoch Timestamp (Unix Time) คืออะไร และทำไมถึงใช้ในระบบคอมพิวเตอร์?
จุดกำเนิดของ Unix Time
การจะเข้าใจ epoch timestamp ซึ่งมักเรียกว่า Unix time, POSIX time หรือเรียกสั้นๆ ว่า epoch นั้น เราต้องย้อนกลับไปดูจุดกำเนิดของระบบปฏิบัติการ Unix ในช่วงต้นทศวรรษ 1970 ระบบ Unix time เป็นระบบติดตามเวลาในรูปแบบผลรวมของวินาทีที่เพิ่มขึ้นเรื่อยๆ โดยเฉพาะอย่างยิ่ง มันแสดงถึงจำนวนวินาทีที่ผ่านไปนับตั้งแต่ Unix epoch ซึ่งถูกกำหนดไว้ที่เวลา 00:00:00 Coordinated Universal Time (UTC) ของวันพฤหัสบดีที่ 1 มกราคม 1970
เมื่อ Ken Thompson และ Dennis Ritchie กำลังพัฒนาระบบ Unix เวอร์ชันแรกๆ ที่ Bell Labs พวกเขาต้องการวิธีที่ง่ายและมีประสิทธิภาพสำหรับคอมพิวเตอร์ในการจัดเก็บและประมวลผลวันเวลา วันที่ในรูปแบบที่มนุษย์อ่านได้ (เช่น '29 กรกฎาคม 2026') มีความซับซ้อนอย่างมากสำหรับคอมพิวเตอร์ เนื่องจากมีจำนวนวันในแต่ละเดือนไม่เท่ากัน (28, 29, 30 หรือ 31 วัน) มีปีอธิกสุรทิน เขตเวลา (time zones) และการปรับเวลาตามฤดูกาล (DST) การแทนเวลาด้วยจำนวนเต็มตัวเดียวที่เพิ่มขึ้นเรื่อยๆ ช่วยให้ผู้พัฒนา Unix สร้างมาตรฐานเวลาที่เป็นสากล ไม่อัตโนมัติ และจัดเก็บ จัดเรียง หรือคำนวณทางคณิตศาสตร์ได้ง่าย
ทำไมนักพัฒนาจึงยังใช้ Epoch Timestamp ในปัจจุบัน
แม้ว่าจะผ่านไปหลายทศวรรษ Epoch time ก็ยังคงเป็นโครงสร้างหลักของระบบคอมพิวเตอร์สมัยใหม่ ด้วยเหตุผลดังนี้:
- ความง่ายและมีประสิทธิภาพ: การจัดเก็บจำนวนเต็มแบบ 32-bit หรือ 64-bit ใช้พื้นที่ดิสก์และหน่วยความจำน้อยกว่าการเก็บข้อความวันที่รูปแบบเต็มอย่างมาก เมื่อฐานข้อมูลมีข้อมูลหลายพันล้านแถว การประหยัดพื้นที่เพียงไม่กี่ไบต์ต่อแถวจะช่วยลดต้นทุนการจัดเก็บและเพิ่มประสิทธิภาพดัชนี (index) ของฐานข้อมูลได้อย่างมหาศาล
- ไม่ขึ้นกับเขตเวลา (Time Zone Agnostic): Epoch timestamp ผูกกับเวลา UTC โดยตรง ไม่ว่าผู้ใช้จะอยู่ที่ใดในโลก เมื่อเซิร์ฟเวอร์ในโตเกียวสื่อสารกับไคลเอนต์ในนิวยอร์ก การส่งค่าจำนวนเต็ม epoch จะช่วยป้องกันความสับสนเรื่องเขตเวลา ไคลเอนต์เพียงแค่แปลงค่าจำนวนเต็มนั้นเป็นเขตเวลาท้องถิ่นเมื่อได้รับข้อมูล
- คำนวณทางคณิตศาสตร์ได้ง่าย: การคำนวณระยะเวลาระหว่างสองเหตุการณ์ทำได้ง่ายเพียงแค่ลบค่า timestamp ออกจากกัน หากต้องการทราบว่ามีกี่วินาทีที่ผ่านไประหว่าง log สองตัว ค่า
timestamp2 - timestamp1จะให้คำตอบที่แม่นยำทันที โดยไม่ต้องใช้ลอจิกการแปลงวันที่ซับซ้อน - การจัดเรียงในฐานข้อมูล: การจัดเรียงข้อมูลตามลำดับเวลาด้วยคอลัมน์จำนวนเต็มทำได้เร็วกว่าการแปลงและจัดเรียงข้อความ timestamp มาก
ผลกระทบของวินาทีอธิกสุรทิน (Leap Seconds)
รายละเอียดทางเทคนิคอย่างหนึ่งของ Unix time คือการจัดการกับวินาทีอธิกสุรทิน (leap seconds) ซึ่งเป็นการปรับเวลาเพิ่มขึ้น 1 วินาทีเป็นครั้งคราวในเวลา UTC เพื่อให้เวลาใกล้เคียงกับเวลาสุริยคติเฉลี่ย น่าสนใจที่ Unix time ไม่ได้ นำวินาทีอธิกสุรทินมาคำนวณด้วย ในระบบ Unix time แต่ละวันจะถูกนับเป็น 86,400 วินาทีเสมอ เมื่อเกิดวินาทีอธิกสุรทิน นาฬิกา Unix จะเล่นวินาทีเดิมซ้ำสองครั้ง การออกแบบนี้ช่วยป้องกันไม่ให้ timestamp เกิดความผันผวน แม้ว่าจะทำให้ Unix time ไม่ใช่ระยะเวลาทางกายภาพที่เที่ยงตรง 100% นับตั้งแต่ปี 1970 แต่สำหรับซอฟต์แวร์ส่วนใหญ่ ข้อแตกต่างเล็กน้อยนี้สามารถยอมรับได้และดีกว่าการต้องคอยติดตามวินาทีอธิกสุรทินในอดีตทั้งหมด

