รูปแบบวันที่ ISO 8601 และ RFC 3339 แตกต่างกันอย่างไร


280

ISO 8601และRFC 3339ดูเหมือนจะเป็นสองรูปแบบที่ใช้กันทั่วไปในเว็บ ฉันควรใช้อันอื่นหรือไม่? เป็นเพียงส่วนขยายหรือไม่ ฉันต้องใส่ใจสิ่งนั้นจริงๆเหรอ?


42
ฉันได้เปลี่ยนการเชื่อมโยงไป RFC จากietf.org/rfc/rfc3339.txtเพื่อ HTML รุ่นที่tools.ietf.org/html/rfc3339 เมื่อเชื่อมโยงไปยัง RFCs คุณควรเสมอเชื่อมโยงไปยังรุ่น HTML ที่tools.ietf.org/html ไม่เพียง แต่นำทางได้ง่ายขึ้นด้วยการเชื่อมโยงส่วนต่าง ๆ แต่ที่สำคัญพวกมันจะแสดงรายการ RFCs ที่มีการอัปเดตหรือล้าสมัย RFC ที่คุณอ่านอยู่ ผู้คนอ้างถึง RFCs ที่ล้าสมัยโดยไม่รู้ตัวตลอดเวลาใน Stack Overflow และฉันจะทำซ้ำคำแนะนำนี้จนกว่าปัญหาจะหายไป (เพื่อหลีกเลี่ยงข้อสงสัยนี้ RFC ไม่ล้าสมัย.)
มาร์ค Amery

คำตอบ:


238

เป็นเพียงส่วนขยายหรือไม่

ค่อนข้างดีใช่แล้ว - RFC 3339 ถูกระบุว่าเป็นโปรไฟล์ของ ISO 8601 โดยเฉพาะอย่างยิ่ง RFC 3339 ระบุการแสดงวันที่และเวลาอย่างสมบูรณ์ (เพียงเสี้ยววินาทีเท่านั้นที่เป็นตัวเลือก) RFC ยังมีความแตกต่างเล็กน้อยบางอย่างเล็กน้อย ตัวอย่างเช่นการตัดทอนการตัดทอนของปีที่ไม่อนุญาตให้มีเพียงสองหลัก - RFC 3339 ต้องใช้ 4 หลักปีและ RFC อนุญาตให้ใช้อักขระระยะเวลาเป็นทศนิยมในเสี้ยววินาที RFC ยังอนุญาตให้ "T" ถูกแทนที่ด้วยช่องว่าง (หรืออักขระอื่น ๆ ) ในขณะที่มาตรฐานอนุญาตให้ละเว้นเท่านั้น (และเฉพาะเมื่อมีข้อตกลงระหว่างทุกฝ่ายที่ใช้การเป็นตัวแทน)

ฉันจะไม่กังวลมากเกินไปเกี่ยวกับความแตกต่างระหว่างทั้งสอง แต่ในกรณีที่การใช้งานของคุณไม่เกิดขึ้นมันจะคุ้มค่าในขณะที่มองดู:


11
เป็นอีกวิธีหนึ่งที่ ISO อนุญาตให้เว้น 'T' แต่ RFC 3339 ได้กำหนดไว้ว่า tools.ietf.org/html/rfc3339#page-12
Java Guy

21
ขออภัย Java Guy แต่นั่นไม่ค่อยถูกต้องนัก ภาคผนวกที่คุณอ้างถึงนั้นเป็นเพียงการให้ข้อมูลเท่านั้นและข้อ จำกัด นั้นก็เพื่อให้ไวยากรณ์ง่ายขึ้น หมายเหตุในตอนท้ายของส่วนที่ 5.6 ระบุไว้อย่างชัดเจนว่าอาจมีการใช้ช่องว่างเพื่อประโยชน์ในการอ่านได้โดยอ้างถึงการกล่าวถึงการอ่านก่อนหน้าซึ่งเป็นหัวข้อ 5.2 อ้างถึง: "แอปพลิเคชันที่ใช้ไวยากรณ์นี้อาจเลือกเพื่อให้สามารถอ่านได้เพื่อระบุวันที่เต็มและเต็มเวลาโดยคั่นด้วยช่องว่าง (พูด) อักขระ"
เกร็กเอ. วูดส์

8
@JavaGuy ภาคผนวกที่คุณเชื่อมโยงไปยังไม่ได้แม้กระทั่งการพูดคุยเกี่ยวกับ RFC 3339 ไวยากรณ์ - มันบรรดาศักดิ์ISO 8601 รวบรวม ABNFและมีความพยายามที่จะอธิบายอย่างเป็นทางการไวยากรณ์ของISO 8601ใช้ABNF ไม่มีสิ่งใดที่กล่าวควรนำมาเป็นหลักฐานเกี่ยวกับไวยากรณ์ RFC 3339 datetime
Mark Amery

3
FWIW: มีการพูดคุยกันในรายการ coreutils: lists.gnu.org/archive/html/bug-coreutils/2006-05/msg00019.html
Frederick Nord

9
ฉันเป็นผู้เขียนที่จัสติน (ความคิดเห็นก่อนหน้า) ติดต่อ (แม้ว่าจะไม่รับผิดชอบต่อการยกน้ำหนักอย่างหนักที่นั่น) ฉันยืนยันความคิดเห็นของเขา โดยทั่วไปผมจะแนะนำเอกสารข้อกำหนดเช่น RFC3339 ระบุแทนที่จะต้อง - เป็นบริบทของการใช้งานที่กำหนดสิ่งที่เป็นที่ต้องการ ตราบใดที่มันชัดเจนว่ามีจุดประสงค์อะไรแล้วการอ้างอิงการสร้างไวยากรณ์เฉพาะนั้นก็ถือว่าใช้ได้ (นี้ไม่ได้จริงๆที่แตกต่างกันกับสิ่งที่ตัวเองไม่ RFC3339 ในการอ้างอิงการคัดเลือกเพื่อ ISO8601.) ดูเพิ่มเติมหมายเหตุในส่วน 5.6
Graham Klyne

20

RFC 3339 ส่วนใหญ่เป็นโปรไฟล์ของ ISO 8601 แต่จริง ๆ แล้วมันไม่สอดคล้องกับการยืมข้อกำหนดเขตเวลา "-00: 00" จาก RFC 2822 นี่คือคำอธิบายในบทความ Wikipedia


4

คุณไม่ควรจะต้องใส่ใจมากขนาดนั้น ตามตัวของมันเอง RFC 3339 เป็นชุดของมาตรฐานที่ได้มาจาก ISO 8601 มีความแตกต่างค่อนข้างน้อยและพวกเขาทั้งหมดระบุไว้ใน RFC 3339 ฉันสามารถผ่านมันได้ทั้งหมด แต่คุณน่าจะทำได้ดีกว่า แค่อ่านเอกสารให้ตัวเองในกรณีที่คุณกังวล:

http://tools.ietf.org/html/rfc3339

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.