ไม่ช้าก็เร็ว นักเขียนโปรแกรมทุกคนก็ต้องจัดการกับเขตเวลา
และผมให้คำแนะนำอะไรไม่ได้มากนัก ที่ผมให้ได้ก็คืออุทาหรณ์
ผมบอกคุณได้ครับว่าทำไมคุณถึงไม่ควรเข้าไปยุ่งกับเขตเวลาถ้าคุณทำได้
ลองนึกภาพว่าใครคนหนึ่งสร้างแอปพลิเคชัน
ที่ให้คุณคำนวณได้ว่าในอดีตที่ผ่านมานั้นมีกี่วินาที
คุณพิมพ์วันที่แล้วก็เวลา มันก็จะให้จำนวนวินาทีกับคุณ
แล้วพวกเขาก็มองดูมันแล้วก็คิดว่า "โอเค นั่นน่าจะได้ผลสำหรับฉันนะ..."
"แต่ลองเพิ่มกล่องเล็ก ๆ ที่ให้ใส่เขตเวลาได้ดูดีกว่า"
ฉะนั้น ถ้าคุณกำลังเปรียบเทียบระหว่างตอนนี้ในนิวยอร์ก กับห้าวันที่แล้วในลอนดอน คุณก็หาได้ครับ
และนั่นดูดี กล่องรายชื่อนั่นให้คุณเปลี่ยนได้ว่า คุณกำลังเร็วกว่าหรือช้ากว่ากรีนิชกี่ชั่วโมง
สุดยอด
ไม่ช้าไม่นาน หลังจากที่มันเริ่มได้รับความนิยม พวกเขาก็ได้รับโทรศัพท์จากออสเตรเลีย
แล้วออสเตรเลียก็จะพูดว่า "G'day ma--"
ผมว่าผมไม่เล่นเรื่องสำเนียงดีกว่า
ผมไม่ควรเล่นเรื่องสำเนียงนะ
ออสเตรเลียก็จะบอกว่า "สวัสดี"
"แต่ว่านะ ตอนนี้เวลาของเราเร็วกว่ากรีนิชอยู่ 9 ชั่วโมงครึ่ง"
แล้วนักเขียนโปรแกรมก็จะ "จริงเหรอ?"
"ใช่ 9 ชั่วโมงครึ่ง"
"โอเค งั้นผมจะเพิ่มให้เป็นกรณีพิเศษสำหรับคุณ ไม่มีปัญหา"
ไม่นานต่อมา ใครบางคนก็จะโทรศัพท์มาจากเนปาล
แล้วพวกเขาก็จะบอกว่า "สวัสดี เราเร็วกว่ากรีนิชอยู่ 5 ชั่วโมง 15 นาทีนะ"
แล้วพวกเขาก็ตอบว่า "จริงเหรอ?" "ใช่ เราใช้แบบนี้สืบต่อกันมาหลายรุ่นละ ใช่ 5 ชั่วโมงกับ 15 นาที"
ยอด โอเค แล้วพวกเขาก็ระบุลงไปเป็นกรณีพิเศษ และพวกเขาก็อาจจะค้นหา
รายชื่อของเขตเวลาทั้งหมด รายชื่อเขตเวลาที่เป็นทางการที่
บอกคุณว่าอะไรเป็นอะไร แล้วพวกเขาก็จะแน่ใจได้ ว่าพวกเขาครอบคลุมทุก ๆ เขตเวลาในโลก
แล้วก็มาถึงฤดูใบไม้ร่วงครับ
แล้วพวกเขาก็ได้รับโทรศัพท์จากอังกฤษ
แล้วอังกฤษก็จะบอกว่า "ขอโทษนะครับ เอ่อ พวกเราพลาดไปชั่วโมงนึง มันเกิดอะไรขึ้น"
"เดี๋ยวนะ นาฬิกาเพิ่งจะปรับไป"
"ไม่มีปัญหา เดี๋ยวสิ เราจัดการเรื่องนี้ไปแล้ว"
"เราจดไว้แล้วว่าเมื่อไรที่เปลี่ยนเข้า ช่วงเวลาออมแสง แล้วก็ใส่ไปแล้วด้วย"
แล้วอังกฤษก็จะบอกว่า "ไม่ ๆ ช่วงเวลาออมแสงของเรามันอยู่ก่อนหน้านี้อาทิตย์นึง"
"มันแตกต่างกันตามที่ที่คุณอยู่"
"เราปรับนาฬิกาก่อนคุณหนึ่งอาทิตย์นะ"
แล้วพอถึงจุดนั้น
นักเขียนโปรแกรมก็จะเริ่มนั่งกุมหัวตัวเอง
แล้วนึกได้ว่าพวกเขากำลังเล่นกับอะไรอยู่
และนั่นไม่มีปัญหาอะไร พวกเขาใส่มันเข้าไป
และพวกเขาก็จัดการข้อมูลทุกประเทศที่ เปลี่ยนช่วงเวลาออมแสงคนละวันกัน
พวกเขาก็จะดูไฟล์ที่บอกว่าทำอย่างไรแล้วก็คัดลอกพวกนั้นเข้าไป
แล้วพวกเขาก็ได้รับโทรศัพท์จากคนทางซีกโลกใต้อีกครั้งนึงที่บอกว่า
"เอ่อ เราไม่ได้ปรับเวลาย้อนกลับในฤดูใบไม้ร่วง เราปรับเดินหน้า"
"ฤดูใบไม้ผลิของเราอยู่เดือนพฤศจิกายน"
ถึงตรงนั้นพวกเขาก็เริ่มคิดหนักว่าจะเลือกเหล้าหรือเบียร์อันไหนดี
แล้วก็คิดว่าจะดื่มสักกรึ๊บนึงก่อนทำงานต่อดีไหม
แล้วพวกเขาก็จะใส่มันลงไปในโค้ดด้วยเช่นกัน
แล้วพวกเขาก็ได้รับโทรศัพท์จากซามัว
ในมหาสมุทรแปซิฟิก บนเส้นแบ่งเขตวันสากล
แล้วซามัวก็บอกว่า "สวัสดี"
"คือว่า ปีก่อนโน้นเราข้ามวันไปวันนึง"
แล้วนักเขียนโปรแกรมก็ถามกลับ "อะไรนะ?"
"ใช่ เราข้ามวันไปวันนึง เราข้ามจากวันที่ 29 ธันวาคม 2011 เป็นวันที่ 31 ธันวาคม"
"เราขยับข้ามฝั่งของเส้นแบ่งเขตวันสากล จากที่เคยอยู่หลายชั่วโมงช้ากว่ากรีนิช...
...มาอยู่หลายชั่วโมงเร็วกว่ากรีนิชแทนน่ะ จะได้ค้าขายกับออสเตรเลียสะดวกขึ้น"
"ช่วยคิดถึงเรื่องนั้นตอนที่คำนวณว่าเวลา ผ่านไปกี่วันหรือกี่วินาทีในอดีตด้วยได้ไหม"
[ถอนหายใจยาว] นั่นไม่มีปัญหาครับ มันยังมีไฟล์ที่บอกว่า ตอนไหนที่ประเทศไหนเปลี่ยนเขตเวลา
ปรากฏว่ามันเกิดขึ้นบ่อยด้วย
แต่พวกเขาประกาศล่วงหน้า ฉะนั้นถ้าคุณอัปเดตไฟล์นั้นอยู่เสมอ
แล้วก็ใส่มันลงไปในโค้ดโปรแกรมคุณด้วย มันก็ไม่มีปัญหาอะไรครับ
แล้วคุณก็มองย้อนกลับไป แล้วคุณก็นึกได้ว่า ระหว่างสงครามโลกครั้งที่สอง
อังกฤษมี double British Summer Time
ทั้งปีกลายเป็น British Summer Time แล้วก็เพิ่มไปอีกหนึ่งชั่วโมง
ฉะนั้น มันก็กลายเป็นเร็วกว่ากรีนิชสองชั่วโมง ทั้ง ๆ ที่กรีนิชมันก็อยู่ในนั้นนั่นแหละ
ไม่มีปัญหา คุณจัดการได้
ว่าแต่ คุณจำได้ไหมว่าตอนที่ผมเริ่มพูด ผมพูดในฐานะคุณหรือผม
เพราะว่าผมเคยทำเรื่องนี้มาก่อน แล้วมันน่าปวดหัวมาก
แล้วคุณก็ตรวจเช็คอีกครั้งว่าคุณติดตามข่าวสาร
ว่าประเทศไหนกำลังจะเปลี่ยนเขตเวลา ซึ่งเกิดขึ้นหลายรอบเสียด้วย
บางครั้งก็หลายหนในปีเดียว เพราะว่ามีการเปลี่ยนแปลงรัฐบาล
แล้วนักเขียนโปรแกรมคนนั้นก็ได้รับโทรศัพท์จากลิเบีย
ซึ่งในปี 2013 ได้แจ้งล่วงหน้าเพียงไม่กี่วันว่า พวกเขาตัดสินใจที่จะไม่ปรับนาฬิกากลับ
มันเป็นไปไม่ได้เลยครับว่าใครจะอัปเดตข้อมูลได้ทัน
หมายความว่าคอมพิวเตอร์ทุกเครื่องในลิเบีย ไม่ว่าจะระบบปฏิบัติการไหน มันก็จะ
คลาดไปหนึ่งชั่วโมง
นั่นโอเค คุณอ่านข่าวเกี่ยวกับเรื่องนั้นแล้วก็รีบแก้โค้ดด้วยเช่นกัน
แล้ว แล้วคุณก็ได้รับโทรศัพท์จากเขตเวสต์แบงก์
ที่ซึ่งพลเมืองอิสราเอลใช้เขตเวลาคนละเขตกับพลเมืองปาเลสไตน์
เพราะว่าฝ่ายหนึ่งถือตามอิสราเอล ส่วนอีกฝ่ายนึงไม่
แล้วคุณก็จะมีคนสองกลุ่มในบริเวณเดียวกันที่ใช้เขตเวลาคนละเขต
แล้วพวกเขาก็ต้องถามตัวเองว่าพวกเขาอยู่ในเขตเวลาไหน ขึ้นอยู่กับว่าพวกเขาเป็นใครและอยู่ที่ไหน
แล้วก็ไม่มีทางที่จะเขียนมันลงไปในโปรแกรมได้ แล้วจากนั้น...
ก็ได้รับโทรศัพท์จากนักประวัติศาสตร์
ที่บอกว่า "อ่า ผมกำลังจะคำนวณเวลาย้อนไปในสมัยศตวรรษที่ 18"
"แล้วเราเปลี่ยนจากปฏิทินจูเลียนมาเป็นปฏิทินเกรกอเรียน"
"ไม่ใช่ว่าเราทำเวลาหายไปสามอาทิตย์นะ...
...แค่ว่าเราข้ามจากวันที่นี้ไปยังวันที่นี้ แล้วก็ข้ามที่เหลือไปเลย"
"ช่วยเขียนโค้ดให้มันใช้งานกับผมด้วยได้ไหม?"
ไม่มีปัญหาครับ ใครบางคนบอกคุณแล้วว่าวันที่พวกนั้นคือวันไหน
แล้วคุณก็เขียนมันลงไปในโปรแกรมของคุณได้เช่นกัน
แต่ตอนนี้มันดูยาวและซับซ้อนมาก
และโค้ดนี้ก็ดูเหมือนเส้นสปาเกตตีที่พันกันยุ่งเหยิง แต่ก็ยังใช้งานได้
แล้วจากนั้นคุณก็ได้รับโทรศัพท์จากนักประวัติศาสตร์รัสเซีย
ที่บอกว่า "อ้า เราเพิ่งจะเปลี่ยนมาใช้ปฏิทิน เกรกอเรียนในศตวรรษที่ 20 เองนะ...
... แล้วดูเหมือนกับว่าวันที่ถูกข้ามไปนั้นขึ้นอยู่กับที่อยู่ของคุณด้วย...
...แล้วคุณช่วยจัดการตรงนี้ด้วยได้ไหม?" แล้วคุณก็ได้รับโทรศัพท์อีกสายจากนักประวัติศาสตร์อังกฤษ
ที่บอกว่า จนถึง น่าจะประมาณศตวรรษที่ 16 นะ
ที่เราเริ่มต้นปีในวันที่ 25 มีนาคม
ทำให้คุณปวดหัวอย่างหนัก
จากวันที่ 24 มีนาคม 924
แล้วก็เป็นวันที่ 25 มีนาคม 925 และนั่นคือวันถัดไปนะครับ
เพราะว่าคุณนับจาก 31 ธันวาคม 924 ไปยัง 1 มกราคม 924 เพราะมันเรียงลำดับแบบนั้นน่ะ
มันซับซ้อนและน่าปวดหัวมาก แล้วจากนั้น
คุณก็ได้รับโทรศัพท์จากนักฟิสิกส์ดาราศาสตร์
ที่บอกว่า "อย่างไรก็ตาม เราเพิ่งจะมีอธิกวินาทีไปนะ"
ถึงตรงนี้ คุณจะเริ่ม "อะไรวะ?"
อธิกวินาที เพราะว่าโลกไม่ได้โคจรด้วยความเร็วคงที่
มันช้าลง มันเร็วขึ้น เนื่องจากแผ่นเปลือกโลกเคลื่อนที่
และสนามแม่เหล็กเปลี่ยนแปลง หรืออะไรประมาณนั้น และในบางครั้ง
ที่สหพันธ์ดาราศาสตร์สากลจะคำนวณหาว่าเราต้องเพิ่มอธิกวินาทีไหม
ถ้าคุณต้องเพิ่ม นาฬิกาก็จะนับ 23:59:58
แล้วก็ 23:59:59
แล้วแทนที่มันจะเป็น 00:00:00 แบบที่เขตเวลาทั่วไปมันควรจะเป็น
มันเป็น 23:59:60
แล้วทุกอย่างก็พังทลายเพราะว่าคุณก็จะมี 61 วินาทีในหนึ่งนาที
ฉะนั้น ก็ขึ้นกับวิธีการของคุณครับ ไม่ว่า
นาฬิกาของคุณผิดกับเรือนอื่น ๆ ในโลกไป 1 วินาที
หรือมันนับวินาทีซ้ำ
วิธีการที่คุณจะจัดการกับสิ่งนี้ก็คือสิ่งที่เรียกว่าตราเวลายูนิกซ์
และ Numberphile ผมว่านะ น่าจะเคยพูดถึงเรื่องนี้ไปแล้ว
คุณก็จะมีตัวเลขนี้ซี่งเริ่มจากวินาทีแรกของปี 1970
แล้วก็นับเพิ่มขึ้นหนึ่งวินาที ต่อวินาที
สม่ำเสมอ ติ๊ก ติ๊ก ติ๊ก
และนั่นยอดเยี่ยมเพราะว่าสิ่งที่คุณต้องทำ ก็แค่เอาวันที่ใด ๆ ก็ตามที่คุณได้รับมา
แล้วก็คำนวณออกมาเป็นตราเวลายูนิกซ์
แล้วคุณก็เอามันใส่เข้าไปในฐานข้อมูล
แล้วนั่นก็จะจัดการกับอธิกวินาทีด้วยเช่นกัน
นอกจากว่ามันไม่ครับ! แน่นอนว่ามันไม่
เพราะว่าคุณมีเวลาสากลเชิงพิกัด
ซึ่งนับรวมเอาอธิกวินาทีเข้าไปด้วย
มันนับซ้ำเป็นบางครั้ง แล้วมันก็รวมเอา 23:59:60 เข้าไปด้วย
แล้วคุณก็ยังมีเวลาดาราศาสตร์ ซึ่งไม่ได้นับอธิกวินาทีรวมเข้าไป
แล้วก็จะเริ่มผิดจังหวะกับส่วนอื่น ๆ ของโลก
เพราะว่าเราต้องมองดวงดาวแล้วก็ออกแบบกล้องโทรทรรศน์จากมัน
[ถอนหายใจลึก]
และบทเรียนที่คุณได้รับ...
บทเรียนที่คุณได้รับหลังจากเล่นกับเขตเวลา ก็คือสิ่งที่คุณทำ...
... ก็คือคุณปล่อยโค้ดของคุณไว้ยังงั้น...
... คุณไม่ลองเขียนอะไรหรือหาทางจัดการอะไรต่อไปอีกแล้ว
คุณมองดูคนที่ทำมาก่อนคุณ
คุณมองดูที่คนแรกที่ทำ คนที่จัดการกับมันมาก่อนหน้านี้
คนที่สร้างโค้ดสปาเกตตียุ่งเหยิงนั่น
แล้วคุณก็ขอบคุณพวกเขาอย่างสูงที่ทำให้โค้ดนั้นเป็นโอเพนซอร์ซ
แล้วคุณก็ให้เครดิตเขา แล้วคุณก็เอาสิ่งที่พวกเขาทำมาใส่ในโปรแกรมของคุณ
แล้วคุณก็ไม่ต้องสนใจมันอีกต่อไป
เพราะว่าตรงนั้น มันมีความบ้าคลั่งอยู่ครับ
กูเกิลนั้นมีวิธีการที่ดีมาก ๆ ที่จะจัดการกับอธิกวินาที ซึ่งพวกเขาคิดขึ้นเอง
มีบทความเกี่ยวกับมันในบล็อกของพวกเขาอยู่แล้ว ผมว่านะ ที่อธิบายมัน
พวกเขาทำสิ่งที่เรียกว่า leap smear
เพราะว่าการมี 61 วินาทีในหนึ่งนาที
หรือว่ามีนาฬิกาที่เดินช้าไปหนึ่งวินาที
ก่อให้เกิดปัญหาที่เลวร้ายมากได้กับองค์กรขนาดใหญ่ที่ต้อง
เชื่อมโยงทุกอย่างเข้าด้วยกันอย่างแม่นยำและ ต้องไว้ใจว่าข้อมูลชิ้นหนึ่งถูกเก็บก่อนหน้าอีกชิ้นหนึ่ง
พวกเขากระจายวินาทีนั้นออกไปจนเต็มวันครับ
พวกเขาทำให้นาฬิกาของเขานับช้าลงทีละไมโครวินาที
ติ๊ก ติ๊ก ติ๊ก แบบนั้นทั้งวัน
ฉะนั้น บางครั้งอาจจะคลาดเคลื่อนไปจากความจริงประมาณครึ่งวินาที
แต่ตราบใดที่ทุกอย่างบนเซิร์ฟเวอร์ของพวกเขาคลาดไปครึ่งวินาที
มันถูกสร้างมาเพื่อให้ผิดจังหวะกับทั้งโลก ตราบใดที่มันยังรู้ตัวว่าอะไรเกิดก่อนอะไร
ความต่อเนื่องนั้นสำคัญกว่าเวลาที่แม่นยำครับ