อย่าพลาดเรื่องเวลา! ทำไมระบบจองคิวถึงเพี้ยนเมื่อข้ามเขตเวลาและปรับเวลาฤดูร้อน

อ่าน 3 นาที 3 ผู้อ่าน

อย่าพลาดเรื่องเวลา! ทำไมระบบจองคิวถึงเพี้ยนเมื่อข้ามเขตเวลาและปรับเวลาฤดูร้อน

กับดักของเวลาที่ดูเหมือนง่าย

การสร้างระบบจองคิวดูเหมือนเป็นงานง่ายๆ จนกระทั่งคุณต้องเจอกับลูกค้าที่อยู่คนละเขตเวลา (Timezone) หรือวันที่นาฬิกาโลกมีการปรับเวลาฤดูร้อน (DST - Daylight Saving Time) ซึ่งเป็นการปรับนาฬิกาให้เร็วขึ้นหรือช้าลง 1 ชั่วโมงตามฤดูกาล ระบบที่คุณเขียนไว้ว่าทำงานได้ดีบนเครื่องตัวเอง อาจจะแสดงเวลาผิดไป 1 ชั่วโมงสำหรับลูกค้าคนอื่น หรือจู่ๆ ก็มีช่วงเวลาว่างแปลกๆ โผล่มาในวันที่มีการเปลี่ยนเวลา ทั้งหมดนี้เกิดจากความเข้าใจผิดที่ว่าตัวเลขอย่าง 09:00 คือจุดเวลาที่ตายตัว

09:00 ไม่ใช่เวลามาตรฐานสากล

เวลา 09:00 เป็นเพียงตัวเลขบนหน้าปัดนาฬิกาในเขตเวลานั้นๆ ไม่ใช่เวลามาตรฐานโลก (UTC) ที่ทุกคนใช้ร่วมกัน ตัวอย่างเช่น ร้านทำผมในปารีสที่เปิด 9 โมงเช้า ในหน้าร้อนเวลาจะตรงกับ 7 โมงเช้าของเวลาสากล แต่พอหน้าหนาวจะกลายเป็น 8 โมงเช้า เพราะมีการปรับเวลาฤดูร้อนเข้ามาเกี่ยวข้อง ดังนั้นตัวเลข 9 โมงเดิม จึงหมายถึงจุดเวลาที่ต่างกันในแต่ละช่วงของปี

กฎเหล็กของการเขียนโค้ดระบบเวลา

ทางแก้ที่ถูกต้องคือการสร้างช่วงเวลาในเขตเวลาของธุรกิจนั้นๆ ให้โปรแกรมจัดการเรื่องส่วนต่างของเวลาให้โดยอัตโนมัติ แล้วค่อยแปลงเป็นเวลาสากลในขั้นตอนสุดท้าย อย่าพยายามคำนวณส่วนต่างด้วยตัวเองหรือเขียนเลขตายตัวลงไปในโค้ด เพราะมันจะทำให้ระบบพังเมื่อเจอการเปลี่ยนเวลาในแต่ละปี

ทำไมการคำนวณแบบเดิมถึงทำให้ระบบพัง

หากคุณใช้การคำนวณแบบเอาเวลาสากลมาบวกเพิ่มไปเรื่อยๆ คุณจะเจอปัญหาในวันที่นาฬิกาขยับ เช่น ในวันที่มีการปรับเวลาฤดูร้อน ช่วงเวลาตี 2 อาจจะหายไปเลยหรือเกิดขึ้นซ้ำสองครั้ง หากระบบของคุณไม่เข้าใจเรื่องเขตเวลา มันจะสร้างคิวว่างที่ไม่มีอยู่จริงขึ้นมา ทำให้ลูกค้าจองเวลาที่ไม่มีตัวตนได้

สรุปสั้นๆ

สำหรับคนที่เขียนโปรแกรมหรือทำระบบจองคิว:

  • อย่ามองว่าเวลาเป็นแค่ตัวเลขที่บวกเพิ่มได้
  • ให้ใช้ไลบรารีจัดการเวลาที่ระบุเขตเวลาได้เสมอ
  • แปลงค่าเป็นเวลาสากลเฉพาะตอนเก็บข้อมูลหรือตอนแสดงผลเท่านั้น
  • ทดสอบระบบด้วยวันที่ที่มีการปรับเวลาฤดูร้อนเสมอ เพื่อป้องกันข้อผิดพลาดที่หาไม่เจอในวันปกติ

การเข้าใจว่า 9 โมงเช้าคือเวลาท้องถิ่นไม่ใช่เวลาสากล จะช่วยให้ระบบของคุณแม่นยำและไม่มีปัญหาจุกจิกกวนใจลูกค้าในระยะยาว

แชร์ข่าวนี้

เรียบเรียงจากข่าวของ DEV Community อ่านข่าวต้นฉบับ ↗

← กลับไปหน้าข่าวสาร