เปรียบเทียบ RFC 3339 กับ ISO 8601
(ijmacd.github.io)- เมื่อต้องจัดการการเขียนวันที่·เวลา RFC 3339 ใกล้เคียงกับชุดย่อยที่แคบและใช้งานได้ง่ายสำหรับเว็บ·อินเทอร์เน็ต ขณะที่ ISO 8601-1:2019 ครอบคลุมชุดรูปแบบที่กว้างกว่ามาก
- ขอบเขตการเปรียบเทียบจำกัดอยู่ที่ ISO 8601-1:2019 และนิพจน์เพิ่มเติมใน ISO 8601-2:2019 เช่น ฤดูกาล เซต ตัวบ่งชี้ความไม่แน่นอน และเลขคณิตวันที่ ยังไม่ถูกรวมไว้ในตาราง
- มาตรฐานทั้งสองรองรับ รูปแบบวันที่·เวลาพื้นฐาน ที่ใช้กันอย่างแพร่หลายร่วมกัน เช่น
2026-06-26,14:08:00Z,2026-06-26T14:08:00Z, และออฟเซ็ต+00:00 - ISO 8601 ครอบคลุมถึงศตวรรษ ทศวรรษ วันลำดับ วันที่แบบสัปดาห์ เวลาแบบย่อ เครื่องหมายจุลภาคทศนิยม ช่วงเวลา(
P1Y) และช่วง(2026-06-26/P1Y) แต่ในตาราง RFC 3339 ไม่รองรับส่วนใหญ่ - สำหรับการเขียน Date-Time ความต่างเรื่อง ตัวคั่น
Tตัวพิมพ์ใหญ่·เล็ก และออฟเซ็ตอย่าง-00:00เป็นจุดที่กำหนดความเข้ากันได้ของ parser ในทางปฏิบัติ
ขอบเขตการเปรียบเทียบและข้อสมมติ
- ตารางรูปแบบ ไม่ใช่รายการที่ครบถ้วนสมบูรณ์
- มาตรฐานที่ใช้เป็นเกณฑ์คือ ISO 8601-1:2019
- ฉบับก่อนหน้าและร่างมีความแตกต่างที่สำคัญ
- ISO 8601-2:2019 มีนิพจน์เพิ่มเติม แต่หน้านี้ยังไม่ได้นำมารวม
- กลุ่มย่อยต่ำกว่าระดับปี เช่น ฤดูกาล
- หน่วยการจัดกลุ่ม
- เซต
- ตัวบ่งชี้ความไม่แน่นอน
- เลขคณิตวันที่
- RFC 3339 เสนอว่ามาตรฐานย่อยสามารถแทนที่
Tด้วยอักขระอื่นได้ แต่ยกตัวอย่างไว้เพียง อักขระช่องว่าง เท่านั้น - แต่ละมาตรฐานกำหนดรูปแบบตามวัตถุประสงค์การใช้งาน และรูปแบบอื่นนอกเหนือจากนั้นไม่แนะนำ
ISO 8601 ครอบคลุมการเขียนวันที่กว้างกว่า
- ทั้ง RFC 3339 และ ISO 8601 รองรับ วันที่แบบปี-เดือน-วัน เช่น
2026-06-26 - ISO 8601 รองรับการแสดงวันที่ได้หลากหลายกว่า RFC 3339
- ศตวรรษ:
20 - ทศวรรษ:
202 - ปี:
2026 - ปี-เดือน:
2026-06 - วันลำดับ:
2026-177 - วันที่แบบสัปดาห์:
2026-W26,2026-W26-5 - รูปแบบพื้นฐาน:
20260626,2026177,2026W26,2026W265
- ศตวรรษ:
- ในตาราง RFC 3339 ไม่อนุญาตรูปแบบวันที่เฉพาะของ ISO ข้างต้น
ความต่างของการเขียนเวลา
- มาตรฐานทั้งสองอนุญาต เวลาในระดับวินาทีและออฟเซ็ตเขตเวลา ร่วมกัน เช่น
14:08:00Z,14:08:00+00:00,14:08:00.372+00:00 - RFC 3339 ไม่แยกตัวพิมพ์ใหญ่·เล็ก จึงสามารถใช้
t,zแทนT,Zได้- ISO 8601 ฉบับก่อนหน้าก็ไม่แยกตัวพิมพ์ใหญ่·เล็กเช่นกัน
- ISO 8601 สามารถใส่ ส่วนทศนิยม ให้กับค่าหน่วยเวลาที่เล็กที่สุดได้
- ในตารางมักยกตัวอย่างเป็นทศนิยมหนึ่งตำแหน่ง แต่ตัวมาตรฐานอนุญาตความละเอียดได้ตามต้องการ
- อนุญาตทั้งเครื่องหมายจุลภาคและจุดเป็นตัวคั่นทศนิยม และใช้แทนกันได้ในทุกรูปแบบ
- ISO 8601-1:2019 อนุญาตให้ละ
Tได้ในการแสดง เวลาเดี่ยว ๆ หากไม่กำกวม - ISO 8601 รองรับการเขียนเวลาแบบย่อ แบบพื้นฐาน และแบบจุลภาคทศนิยม เช่น
14,14:08,14:08:00,140800,T14:08:00,14:08:00,372 - RFC 3339 อนุญาต ออฟเซ็ต
-00:00เช่น14:08:00-00:00แต่ในตาราง ISO 8601 ไม่อนุญาต
T และตัวคั่นใน Date-Time
- ทั้ง RFC 3339 และ ISO 8601 อนุญาต Date-Time เช่น
2026-06-26T14:08:00Zและ2026-06-26T14:08:00+00:00 - ใน การแสดง Date-Time ของ ISO 8601 ต้องมี
Tเสมอ- ฉบับก่อนหน้าอนุญาตให้ละ
Tใน Date-Time ได้ - แม้ในฉบับก่อนหน้าก็ไม่อนุญาตให้แทรกอักขระทดแทน เช่น ช่องว่างหรือขีดล่าง
- ฉบับก่อนหน้าอนุญาตให้ละ
- ในตาราง RFC 3339 อนุญาตรูปแบบย่อยของ Date-Time ดังต่อไปนี้
tและzตัวพิมพ์เล็ก:2026-06-26t14:08:00z- ตัวคั่นเป็นช่องว่าง:
2026-06-26 14:08:00Z - ตัวคั่นเป็นขีดล่าง:
2026-06-26_14:08:00Z - ออฟเซ็ต
-00:00:2026-06-26T14:08:00-00:00
- ISO 8601 รองรับ Date-Time แบบย่อ รวมถึง Date-Time ที่อิงวันลำดับและวันที่แบบสัปดาห์ เช่น
2026-06-26T14,2026-06-26T14:08,2026-06-26T14:08:00,2026-177T14:08,2026-W26-5T14:08
ระยะเวลาและช่วงเป็นฝั่ง ISO 8601 เป็นหลัก
- ในตาราง รูปแบบ ระยะเวลา (Periods) ถูกทำเครื่องหมายไว้เฉพาะ ISO 8601
- ตัวอย่าง:
P1Y,P1M,P1W,P1D - ตัวอย่างที่มีเวลา:
PT1H,PT1M,PT1S - ตัวอย่างแบบผสม:
P1Y1M1DT1H1M1S - ตัวอย่างทศนิยม:
P1.5Y,P1,5W,PT1.5S
- ตัวอย่าง:
- รูปแบบ ช่วง (Ranges) ก็ถูกทำเครื่องหมายไว้เฉพาะ ISO 8601 เช่นกัน
- วันที่และระยะเวลา:
2026-06-26/P1Y - วันที่และวันที่:
2026-06-26/2026-06-26 - ระยะเวลาและวันที่:
P1Y/2026-06-26 - Date-Time และระยะเวลา:
2026-06-26T14:08/P1DT1H - ช่วงแบบทำซ้ำ:
R/2026-06-26/P1Y,R10/2026-06-26/P1Y
- วันที่และระยะเวลา:
คีย์รูปแบบและเครื่องมือทดสอบ
- ตารางรูปแบบใช้ คีย์รูปแบบ เช่น
%Y,%M,%D,%h,%m,%s%Y: Year%M: Month%D: Day%V: Week Year%W: Week%w: Week Day%O: Ordinal Day%h: Hour%m: Minute%s: Second%u: Microsecond%n: Nanosecond%Z: ชั่วโมงของเขตเวลา พร้อม+หรือ-%z: นาทีของเขตเวลา
- ตัวตรวจสอบรูปแบบจะตรวจเพียงว่าอินพุตตรงกับรูปแบบใดรูปแบบหนึ่งในตารางหรือไม่
- ไม่ได้ตรวจสอบรูปแบบที่เป็นไปได้ทั้งหมด
- ISO 8601 as a Service เป็นบริการสำหรับการทดสอบเบตา
- ปัจจุบันรองรับเฉพาะ Date, Time, DateTime
- ยังไม่รองรับ Period และ Range
- ซอร์สโค้ดเผยแพร่บน GitHub
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
น่าแปลกที่ไม่มีวิธีกำหนด วันที่/เวลาในอนาคต โดยอิงตามเขตเวลาหนึ่ง ๆ ตัวอย่างเช่น อาจอยากนัดประชุมวันที่ 1 กรกฎาคม 2030 เวลา 18:00 น. ตามเวลาท้องถิ่นลอนดอน ซึ่งไม่ว่ากฎเขตเวลาของสหราชอาณาจักรจะเปลี่ยนไปอย่างไรในระหว่างนั้น ก็ต้องยังคงเป็น “18:00 น. ของลอนดอน”
ปัจจุบันสหราชอาณาจักรใช้ประมาณ Z+00:00 ในช่วงพฤศจิกายนถึงมีนาคม และใช้เวลาออมแสง Z+01:00 ในช่วงเมษายนถึงตุลาคม[0] แต่ก่อนถึงปี 2030 ก็อาจรับ Central European Time[1] มาใช้ ลองใช้ British Double Summer Time[2] อีกครั้ง หรือยกเลิกเวลาออมแสงก็ได้ ดังนั้น “18:00 น.” เวลาเดียวกันนี้อาจแตกต่างกันมากเมื่ออิงกับ epoch หนึ่ง ๆ
อยากใส่ “18:00 น. ตามเวลาลอนดอน ณ ตอนนั้น” ลงในอีเวนต์ปฏิทิน แต่ไม่มีวิธีแสดง 2030-07-01 18:00:00 Europe/London ในรูปแบบมาตรฐานที่ทำงานร่วมกันได้
[0] https://en.wikipedia.org/wiki/British_Summer_Time
[1] https://en.wikipedia.org/wiki/Central_European_Time
[2] https://en.wikipedia.org/wiki/British_Summer_Time#Periods_of...
tzไว้ในวงเล็บเหลี่ยมหลังสตริง RFC 3339 ได้ และถ้าต้องการแสดงเวลาท้องถิ่น ก็ต้องใส่ค่าประมาณของ UTC offset ไปด้วยตัวอย่างเช่น
2030-07-01 18:00:00 Europe/Londonจะกลายเป็น2030-07-01T18:00:00+01:00[Europe/London]หากกฎของสหราชอาณาจักรเปลี่ยนไปก่อนหน้านั้น timestamp นี้จะกลายเป็น “ไม่สอดคล้องกัน” และให้แอปพลิเคชันตัดสินใจว่าจะจัดการอย่างไร อย่างไรก็ตาม หากใส่!หน้าชื่อเขตเวลาในวงเล็บเหลี่ยม ระบบต้องตรวจจับปัญหา แทนที่จะทำตาม UTC offset แบบหลับหูหลับตารูปแบบ timestamp แบบขยายนี้ยังใช้ในไลบรารี Temporal ที่เสนอสำหรับ JavaScript[1] ด้วย และฟังก์ชันพาร์ส
ZonedDateTime.from()[2] ให้ควบคุมผ่านตัวเลือกoffsetได้ว่าจะให้ฝั่งใดมีความสำคัญกว่าเมื่อเจอ timestamp ที่ไม่สอดคล้องกัน นอกจากนี้ยังรองรับการละ UTC offset แล้วระบุเฉพาะเขตเวลา แต่เตือนว่าช่วงเวลาหนึ่งชั่วโมงที่เกิดซ้ำตอนเปลี่ยนเวลาออมแสงจะกำกวม[0] https://www.ietf.org/archive/id/draft-ietf-sedate-datetime-e...
[1] https://tc39.es/proposal-temporal/docs/strings.html#iana-tim...
[2] https://tc39.es/proposal-temporal/docs/ambiguity.html#ambigu...
แต่ก็ไม่ใช่เรื่องเป็นไปไม่ได้ที่จะจินตนาการว่าระหว่างนั้นสกอตแลนด์อาจจัดประชามติเอกราชอีกครั้ง แล้วเข้าร่วม Central European Time หรือสร้าง Scottish Standard Time ขึ้นมา
2023-11-05 01:30:00 America/New_Yorkจะเป็นหนึ่งในสองเวลาที่ต่างกันในปฏิทิน ความหมายที่ต้องการส่วนใหญ่คือ “เวลาเดียวกันตามนาฬิกาบนผนัง” จึงสมเหตุสมผล แต่มีความยากด้าน UI ในการจัดการเวลาประหลาด ๆ และอาจอยากใส่วิธีแก้ความกำกวมไว้ในไวยากรณ์ด้วย โชคดีที่ปกติการเปลี่ยนเวลาแบบนี้มักเกิดตอนกลางดึก แต่เคยเห็นเรื่องแบบนี้ในงานจริงมาแล้ว
หากเชิญคนที่อยู่ในเขตเวลาที่ไม่มีเวลาออมแสง เวลาในปฏิทินของคนนั้นจะสั่นไหว และบางครั้งเพื่อนร่วมงานต่างประเทศก็ต้องยอมรับเรื่องนี้
[0]: https://www.rfc-editor.org/rfc/rfc5545#section-3.3.5
รูปแบบวันที่-เวลาทั่วไปถูกสร้างขึ้นมาเพื่อแสดงจุดเวลาเฉพาะ แต่ในกรณีนี้ยังไม่มีจุดเวลาเฉพาะแบบนั้น การกำหนดวันที่/เวลาแบบมีโครงสร้างไม่ธรรมดานั้นพบได้บ่อย เช่น ประชุมวันศุกร์สุดท้ายของทุกเดือน ประชุมรายเดือนที่เริ่มวันที่ 31 มกราคม หรือสองวันก่อนสิ้นไตรมาส
ถ้าจะสร้างมาตรฐานที่ครอบคลุมทุกกรณีที่ผู้คนนึกออก ก็น่าจะซับซ้อนขึ้นอย่างรวดเร็ว หากแค่วันที่ เวลา และ instant แบบง่าย ๆ ไม่พอ ก็ดูเหมือนจะไม่มีทางอื่นนอกจากสร้างโครงสร้างแยกต่างหากที่ใส่องค์ประกอบที่ต้องการทั้งหมด
ข้อกำหนด ISO ไม่ได้ให้ใช้ฟรี ดังนั้นโดยทั่วไปควรยึดตาม RFC มากกว่า และการนำไปใช้ในโอเพนซอร์สจำนวนมากก็อิงจากฉบับร่าง จึงพูดได้ยากว่าเป็นมิตรกับโอเพนซอร์สอย่างแท้จริง นี่เป็นภาระใหญ่สำหรับนักพัฒนาโอเพนซอร์สด้วย
ถ้ากำลังสร้างอะไรที่จัดการวันที่ในอนาคต แทบทุกครั้งเราจะอยากเก็บ เวลาตามนาฬิกาท้องถิ่น + ตำแหน่งที่ตั้ง น่าเสียดายที่ไม่มีมาตรฐานสำหรับเรื่องนี้ ยุโรปและสหรัฐฯ มีเขตเวลาค่อนข้างเสถียรจนอาจไม่ค่อยรู้สึก แต่ในหลายภูมิภาค เขตเวลาเปลี่ยนบ่อย การเก็บค่าออฟเซ็ตจึงไม่เสถียร
วันที่ 5 มิถุนายน 2026 เวลา 13:30 ตามนาฬิกาท้องถิ่น, ปารีสคือสิ่งที่คนส่วนใหญ่หมายถึง และขึ้นอยู่กับว่า EU จะจัดการเวลาออมแสงอย่างไร จึงอาจเป็น UTC+2 หรือ UTC+1 ก็ได้ ถ้าเป็น API ที่จัดการเวลาในอดีต ก็ใช้ POSIX timestamp เป็นหน่วยวินาที มิลลิวินาที ไมโครวินาที หรือนาโนวินาทีไปได้เลยiCal เองก็ไม่ได้คำนึงถึงปัญหาที่ตำแหน่งที่ตั้งถูกจัดสรรไปยังเขตเวลาอื่นใหม่ด้วย นอกจากนี้ ไฟล์ iCal ที่ถูกต้องจะรวมข้อมูลเขตเวลาทั้งหมดที่อ้างอิงไว้ ดังนั้นเมื่ออยากแสดงวันที่-เวลาเพียงค่าเดียวจึงยุ่งยาก
[1] https://icalendar.org/iCalendar-RFC-5545/3-3-5-date-time.htm...
2026-06-05T13:30+0200[Europe/Paris]https://www.ietf.org/archive/id/draft-ietf-sedate-datetime-e...
ส่วนที่มักถูกละเลยในมาตรฐานคือการแสดง duration
ดูหัวข้อ 5.5.4.2 “Representation of time-interval by duration only” หน้า 21 ใน http://xml.coverpages.org/ISO-FDIS-8601.pdf ได้เลย คงจะดีถ้า JSON parser ในภาษาสแตติกสามารถกำหนดฟิลด์เป็น duration และ serialize เป็นรูปแบบที่ถูกต้องได้
ตัวอย่างข้อเสนอของ Crystal อยู่ที่นี่: https://github.com/crystal-lang/crystal/issues/11942
เช่น 15 วัน 5 ชั่วโมง 20 วินาที จะเป็น
P15DT5H0M20Sและ 7 สัปดาห์จะเป็นP7Wdurationใน ABNF ของภาคผนวก A ของ RFC 3339 แทนก็ได้เช่นถ้าเขียนเป็น
"duration": { "days": 15, "hours": 5, "seconds": 20 }JSON parser ก็ไม่จำเป็นต้องเข้าใจความหมายของข้อมูล ให้ input validator จัดการก็พอ ไม่ว่า JSON จะแทนข้อมูลนี้อย่างไร สุดท้ายก็ต้องมีขั้นตอนแปลงที่อาจล้มเหลวอยู่ดีสิ่งที่ “ตลก” คือ RFC 3339 และ ISO 8601 มีรูปแบบวันที่-เวลาที่ซ้ำซ้อนกันหลายแบบและมีเป้าหมายทับซ้อนกัน แต่ทั้งคู่กลับไม่รวม
2023-09-01 15:30:59ซึ่งเป็นรูปแบบที่ใช้กันมากที่สุดในทุกระบบและชัดเจนสุด ๆอีกทั้งทั้งสองมาตรฐานยังไม่ชัดเจนมากว่าจะเขียน วันที่ก่อนคริสต์ศักราช และวันที่หลัง
9999-12-31หรือก่อน-9999-01-01อย่างไร และไลบรารีทั่วไปส่วนใหญ่มักจัดการไม่ได้เลย ต่อให้จัดการได้ พฤติกรรมของ00-01-01ก็แทบอยู่ในระดับที่ไม่ได้ถูกนิยามไว้ปฏิทินเกรกอเรียนแปลกตรงที่ปีถัดจาก 1 BC คือ 1 CE และยกเว้นซอฟต์แวร์ดาราศาสตร์เฉพาะทางแล้ว ซอฟต์แวร์แทบทั้งหมดไม่สามารถจัดการช่วงเวลา Unix ที่ไกลจากปัจจุบันมาก ๆ ได้อย่างถูกต้อง แม้แต่เรื่องที่เก็บเป็นสตริงก็พอแล้ว เช่นปีเกิด-ปีตายของจักรพรรดิออกัสตัส มาตรฐานก็ควรนิยามให้ชัดเจน
Tเป็นช่องว่างได้ก็พอ RFC 3339 ก็ทำสิ่งคล้ายกันในแบบที่ยืดยาวกว่ามากก็ยากจะมั่นใจว่า
2023-09-01 15:30:59เป็นรูปแบบวันที่-เวลาที่ใช้มากที่สุดจริงหรือไม่ ภาษาที่มีผู้ใช้มากที่สุดคือภาษาจีน และตัวคั่นเฉพาะอย่าง2023年9月1日ก็พบได้ทั่วไปISO 8601 อนุญาตปีที่ก่อนปี 1582 หรือหลังปี 9999 ได้หากมีข้อตกลงร่วมกัน หากไม่พอดีกับ 4 หลัก ต้องใส่อักขระเครื่องหมายหนึ่งตัวนำหน้า วันที่แบบนี้มีสิ่งที่ทำได้อย่างมีความหมายไม่มาก จึงโดยทั่วไปไม่ค่อยรองรับ แต่ก็เคยเห็นการ parse อยู่พอสมควร โดยเฉพาะในไลบรารีที่ implement แยกจาก C
00-01-01ถูกนิยามว่าเป็น วันที่ 1 มกราคม ปี 1 ก่อนคริสต์ศักราช ISO 8601 ระบุชัดเจนว่าหมายเลขปีเป็นไปตามปฏิทินเกรกอเรียนแบบขยายย้อนหลัง (proleptic Gregorian calendar) ดังนั้นจึง extrapolate ไปได้ถึงลบอนันต์เข้าใจเหตุผลที่ต้องมีอักขระที่ไม่ใช่ช่องว่าง แต่เอาเข้าจริงอย่างน้อยก็ใช้ขีดล่างหรือจุดได้ และก็ไม่เข้าใจว่าทำไมถึงจำกัดช่วงปีไว้ที่สี่หลักทั้งที่เป็นสตริง ทำให้ต้องสละความเป็นสากลของรูปแบบไป
ปี 6 หลัก ให้ความรู้สึกเหมือนเป็นทางออกของปัญหาที่จริง ๆ จะไม่เกิดขึ้น เพียงเพื่อให้ดูมองไกลไปอนาคต เทคโนโลยีหรือบรรทัดฐานทางสังคมในปัจจุบันไม่น่าจะคงอยู่ไปได้ถึง 8000 ปี
คำอธิบายที่ว่า ISO 8601 ใช้ U+2010 HYPHEN และ U+2212 MINUS และในชุดอักขระที่ไม่มีอักขระดังกล่าวต้องใช้ U+2D HYPHEN-MINUS นั้นไม่ถูกต้อง
ISO 8601 จริง ๆ ระบุว่า ถ้าชุดอักขระเป้าหมายอิงกับ ISO/IEC 646 ทั้งสองกรณีต้องใช้อักขระ hyphen-minus ซึ่ง Unicode ก็รวมอยู่ในนี้อย่างแน่นอน แม้จะมีความกำกวมอยู่บ้าง แต่ใน Unicode การตีความนั้นชัดเจน และดูเหมือนเป็นวิธีอ้อม ๆ เพื่อรับประกันความเข้ากันได้กับชุดอักขระอื่นที่อิงกับ 646 โดยกำหนดการแมปมาตรฐานของ 646
เนื้อหาคือ “อักขระทั้งหมดที่ใช้ในการแสดงวันที่และเวลา ยกเว้น ‘hyphen’, ‘minus’, ‘plus-minus’ ล้วนอยู่ใน repertoire ของ ISO/IEC 646 ในสภาพแวดล้อมที่ใช้ character repertoire ซึ่งอิงกับ ISO/IEC 646 ต้องแมปทั้ง ‘hyphen’ และ ‘minus’ เป็น ‘hyphen-minus’”
Unicode อิงกับ ISO 8859 และ ISO 8859 อิงกับ ISO 646 ดังนั้นในชุดอักขระ Unicode ดูเหมือนเจตนาคือให้ใช้ U+2D hyphen-minus
บน Windows เครื่องหมายโคลอนเป็นอักขระพิเศษ จึงมักขัดใจตรงที่เมื่อใส่วันที่และเวลาในชื่อไฟล์ ไม่มีวิธีที่ตรงกับ RFC 3339
คงจะดีถ้าใช้ขีดกลางในวันที่ แต่ละเว้นโคลอนได้แล้วยังสอดคล้องกับ ISO 8601 เช่น
20230831T1510-0500นั้นสอดคล้องและใช้ในชื่อไฟล์ได้ แต่2023-08-31T1510-0500และรูปแบบแปรผันที่คล้ายกันกลับไม่สอดคล้อง นอกจากนี้ฟังก์ชันGet-Dateของ PowerShell ยังไม่เข้าใจ timestamp แบบแรกที่ไม่มีทั้งขีดกลางและโคลอนด้วยเป็น visualization ที่ดีมากสำหรับหัวข้อนี้
เวลาคั่นส่วนวันที่กับเวลา ผมชอบใช้ช่องว่างหรือขีดล่างแทน
Tมากกว่า แต่โดยมากก็ยังใช้Tต่อไปเพื่อหลีกเลี่ยงปัญหากับเครื่องมือที่จัดการเฉพาะ ISO 8601 และเพื่อความสม่ำเสมอTมากกว่า เพราะคงไม่มีใครเผลอแบ่งสตริงแบบนี้โดยอิงจากTสงสัยอยู่สองอย่าง อย่างแรก เหตุผลของ ปีแบบ 6 หลัก คืออะไร? ระบบใด ๆ ที่ออกแบบขึ้นตอนนี้คงไม่มีทางยังอยู่ในปี 100,000 ไม่ใช่หรือ
อย่างที่สอง ISO 8601 แพร่หลายมาก แล้ว RFC 3339 ก็ถูกใช้และนำไปใช้จริงในระบบต่าง ๆ มากเหมือนกันไหม?
timeอย่างเป็นทางการของ Golang และChronoของ Rust มีเครื่องมือในตัวสำหรับจัดการ RFC 3339 แต่ไม่มีสำหรับ RFC 8601เท่าที่จำได้ RFC 8601 มีปัญหาความกำกวมที่ RFC 3339 ไม่มี และ Python ก็เคยมีปัญหาในการแปลงวันที่ไป-กลับด้วยเหตุนี้
ไม่มีรูปแบบที่ระบุ timezone เป็นตัวเลขสี่หลักแบบไม่มีโคลอน แต่
date +%zคืนค่าเป็น±NNNN%:zในเรื่องนี้ยังสอนให้dateแสดงผลแบบนี้เป็นค่าเริ่มต้นได้ด้วย: https://gist.github.com/d081dad407432d53172e30d0d35c39db$ date2023-08-31T11:15:00-07:00±NNNNถ้าใช้เป็นส่วนหนึ่งของ “รูปแบบพื้นฐาน” ก็ถือว่าถูกต้องแม้ไม่มีโคลอน กล่าวคือ ทั้งรูปแบบต้องไม่มีขีดกลางหรือโคลอนเลยดังนั้นสองรายการต่อไปนี้เทียบเท่ากันและถูกต้องทั้งคู่:
2023-09-01T09:40:01+08:0020230901T094001+0800