รูปแบบวันที่ ที่ต้องจำ เป็นครั้งสุดท้าย (ISO 8601)
ในฐานะผู้ใช้งานอุปกรณ์ IT ทุกครั้งที่ได้มือถือเครื่องใหม่ ใช้โปรแกรมใหม่ มักจะต้องงงกับวันที่ เช่น
ผมไม่รู้ว่าวันที่ข้างบนเป็น วันที่ 6 เดือนเมษายน
หรือ เป็นวันที่ 4 เดือน มิถุนายน
ซึ่ง ผมต้องไปเทียบกับไฟล์อื่นที่ใช้วันที่เกินวันที่ 12 ไป เพื่อยืนยันว่าเครื่องนี้เป็น เดือน วัน ปี
หรือ วัน เดือน ปี
อีกวิธีที่ผมทำประจำคือไปเปลี่ยนวันที่ของเครื่องให้แสดงเดือนเป็นตัวหนังสือไปเลย
วันที่ ในมุมมอง developer
เมื่อเป็น user ผมก็คิดว่าเป็นความต่างของระบบ ก็แก้ไขปัญหาเฉพาะหน้าเท่าที่ทำได้ เคยคิดว่าแต่ละภาษา แต่ละโปรแกรม ก็น่าจะมีมาตรฐานกลางสิ เปล่าเลย
บางโปรแกรมเก็บข้อมูลเป็นตัวเลขยาวๆ 1524290397
ซึ่ง คือจำนวนวินาที ตั้งแต่วันที่ 1 มค 1970 UTC
บางโปรแกรมก็เก็บข้อมูลเป็น 21/04/2018
ปีแค่สองหลัก 21/04/18
เปลี่ยนตัวขั้นเวลา 21-04-2018
ปีเป็น พศ 21/04/2561
ซึ่งก็ไม่ได้มีปัญหาหรอก เพราะเรามีเครื่องมือสำหรับ parse ตัวหนังสือพวกนี้ให้กลายเป็น Date
หรือ Calendar
ในรูปแบบที่เราสามารถหักลบ วันที่ได้
แต่…
ถ้า user ที่ใช้ระบบเรา เปลี่ยน timezone ในเครื่องล่ะ เช่น จากเดิมอยู่ไทย และไปเที่ยวสหรัฐ อเมริกา
1524290397
หน่วยนี้ไม่มีปัญหา เพราะระบุไว้แล้วว่าเป็น เวลาของ UTC
ถ้าเราเก็บเป็น 21/04/2018
อันนี้ไว้แค่นี้ โปรแกรมเรามีปัญหาแน่นอน เราไม่รู้ว่าเป็นวันที่ของ timezone ไหน
มาตรฐานวันที่ระดับโลก ISO 8601
ปัญหา pattern วันที่ที่แตกต่างกัน หรือ timezone ที่สับสน จะหมดไปเพียงแค่เราเก็บวันที่ในรูปแบบมาตรฐาน ซึ่งไม่ใช่มาตรฐานของไทย ไม่ใช่มาตรฐานของสหรัฐฯ แต่เป็นมาตรฐานโลก ISO 8601 ใช้เหมือนกันทั่วโลก
Basic Date
ISO 8601 บอกว่าให้เขียนวันที่เป็น
2018-04-21
หรือ ปี เดือน วัน ขั้นด้วย -
ห้ามใช้ /
ทีนี้เราก็ไม่ต้องสับสนระหว่างตำแหน่งของ วัน และ เดือนแล้ว บังคับให้จัดลำดับเลย
สำหรับ developer ที่ต้องการเก็บละเอียดถึงเวลา
Date with Time
2018–04–21T13:26:22
ต่อหลัง ปีเดือนวัน ด้วย T
และชั่วโมง นาที วินาที ขั้นกลางด้วย :
Date Time with Time Zone
หากต้องการระบุรายละเอียดเรื่อง Time Zone ให้ต่อท้ายด้วย
2018–04–21T13:26:22+07:00
+07:00
เป็นการระบุ time zone ว่า +07:00
จาก GMT/UTC
2018–04–21T06:26:22Z
หรือถ้าจะเก็บเป็นเวลา GMT/UTC ไปเลย ให้ลงท้ายด้วย Z
2018–04–21T06:26:22Z
2018–04–21T13:26:22+07:00
2 ค่านี้คือเวลาเดียวกัน
อื่นๆ
นอกจากนี้มาตรฐานยังระบุถึงรูปแบบอื่นๆ
เช่น ไม่ต้องระบุ -
หรือ :
ก็ยังโอเคนะ
20180421T062622Z
แค่เรียงลำดับให้ถูกต้อง และต้องมีตัวอักษรอย่าง T และ Z ระบุ ศึกษาเพิ่มเติมได้ที่
ในฐานะ developer การใช้ ISO 8601 เป็นมาตรฐาน โค้ดบั้คน้อยลงแน่นอน เพราะมั่นใจได้ว่า เมื่อวันที่ถูกแพทเทิน การคำนวณเวลาจะแม่นยำ และในฐานะ user การสื่อสารวันที่ก็คงไม่คลาดเคลื่อนเช่นกัน