Apa perbedaan antara Format Tanggal ISO 8601 dan RFC 3339?

280

ISO 8601 dan RFC 3339 tampaknya merupakan dua format yang umum di web. Haruskah saya menggunakan salah satunya? Apakah hanya ekstensi? Apakah saya benar-benar perlu peduli seburuk itu?

Mark Amery
sumber
42
Saya telah mengubah tautan ke RFC dari ietf.org/rfc/rfc3339.txt ke versi HTML di tools.ietf.org/html/rfc3339 . Saat menautkan ke RFC, Anda harus selalu menautkan ke versi HTML di tools.ietf.org/html . Tidak hanya mereka lebih mudah dinavigasi berkat tautan bagian, tetapi, yang penting, mereka mendaftar di atas setiap RFC yang telah memperbarui atau membuat usang RFC yang Anda baca. Orang-orang tanpa sadar mengutip RFC usang sepanjang waktu di Stack Overflow, dan saya akan terus mengulangi nasihat ini sampai masalah itu hilang. (Untuk menghindari keraguan, ini RFC tidak usang.)
Mark Amery

Jawaban:

238

Apakah hanya ekstensi?

Cukup banyak, ya - RFC 3339 terdaftar sebagai profil ISO 8601. Terutama RFC 3339 menentukan representasi lengkap tanggal dan waktu (hanya detik pecahan yang opsional). RFC juga memiliki beberapa perbedaan kecil yang tidak kentara. Misalnya representasi terpotong tahun dengan hanya dua digit tidak diperbolehkan - RFC 3339 membutuhkan tahun 4-digit, dan RFC hanya memungkinkan karakter periode digunakan sebagai titik desimal untuk detik pecahan. RFC juga memungkinkan "T" digantikan oleh spasi (atau karakter lain), sementara standar hanya memungkinkannya untuk dihilangkan (dan hanya ketika ada kesepakatan antara semua pihak yang menggunakan representasi).

Saya tidak akan terlalu khawatir tentang perbedaan antara keduanya, tetapi jika Anda menggunakan case use-in mereka, itu akan menjadi nilai Anda saat melirik:

ConroyP
sumber
11
Ini adalah cara lain, ISO memungkinkan untuk menghilangkan 'T' tetapi RFC 3339 mengamanatkannya tools.ietf.org/html/rfc3339#halaman 12
Java Guy
21
Maaf Java Guy, tapi itu tidak sepenuhnya benar. Lampiran yang Anda rujuk hanya bersifat informasi dan batasannya adalah untuk menjaga tata bahasa tetap sederhana. Catatan pada akhir bagian 5.6 dengan jelas menyatakan bahwa ruang dapat digunakan demi keterbacaan, mengacu pada penyebutan keterbacaan sebelumnya yang merupakan subjek dari bagian 5.2. mengutip: "Aplikasi menggunakan sintaks ini dapat memilih, demi keterbacaan, untuk menentukan tanggal penuh dan waktu penuh dipisahkan oleh (katakanlah) karakter spasi."
Greg A. Woods
8
@JavaGuy Apendiks yang telah Anda tautkan bahkan tidak berbicara tentang sintaksis RFC 3339 - itu berjudul ISO 8601 Collected ABNF dan merupakan upaya untuk secara resmi menggambarkan tata bahasa ISO 8601 menggunakan ABNF . Tidak ada yang dikatakan harus diambil sebagai bukti tentang sintaks datetime RFC 3339.
Mark Amery
3
FWIW: Telah dibahas pada daftar coreutils
Frederick Nord
9
Saya penulis yang dihubungi Justin (komentar sebelumnya) (meskipun tidak bertanggung jawab atas sebagian besar pekerjaan berat di sana). Saya mengkonfirmasi komentarnya. Secara umum, saya akan menyarankan dokumen spesifikasi seperti RFC3339 tentukan daripada memerlukan - itu konteks penggunaan yang menentukan apa yang diperlukan . Selama itu jelas apa yang dimaksudkan, maka referensi produksi sintaksis tertentu baik-baik saja. (Ini tidak jauh berbeda dengan apa yang dilakukan RFC3339 dalam membuat referensi selektif untuk ISO8601.) Lihat juga CATATAN di bagian 5.6 .
Graham Klyne
20

RFC 3339 sebagian besar merupakan profil ISO 8601, tetapi sebenarnya tidak konsisten dalam meminjam spesifikasi zona waktu "-00: 00" dari RFC 2822. Ini dijelaskan dalam artikel Wikipedia.

Zefram
sumber
4

Anda seharusnya tidak terlalu peduli. RFC 3339, menurut dirinya sendiri, adalah seperangkat standar yang berasal dari ISO 8601. Namun ada beberapa perbedaan menit, dan mereka semua diuraikan dalam RFC 3339. Saya bisa melihat semuanya di sini, tetapi Anda mungkin akan melakukan yang lebih baik cukup baca dokumen sendiri jika Anda khawatir:

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

David Morton
sumber