¿Cuál es la diferencia entre los formatos de fecha ISO 8601 y RFC 3339?

280

ISO 8601 y RFC 3339 parecen ser dos formatos comunes en la web. ¿Debo usar uno sobre el otro? ¿Es uno solo una extensión? ¿Realmente necesito que me importe tanto?

Mark Amery
fuente
42
Cambié el enlace al RFC de ietf.org/rfc/rfc3339.txt a la versión HTML en tools.ietf.org/html/rfc3339 . Al vincular a RFC, siempre debe vincular a las versiones HTML en tools.ietf.org/html . No solo son más fáciles de navegar gracias a los enlaces de sección, sino que, además, enumeran en la parte superior cualquier RFC que haya actualizado u obsoleto el RFC que está leyendo. Sin darse cuenta, la gente cita RFC obsoletos todo el tiempo en Stack Overflow, y voy a seguir repitiendo este consejo hasta que el problema desaparezca. (Para evitar dudas, este RFC no es obsoleto.)
Mark Amery

Respuestas:

239

¿Es uno solo una extensión?

Más o menos, sí: RFC 3339 aparece como un perfil de ISO 8601. En particular, RFC 3339 especifica una representación completa de fecha y hora (solo los segundos fraccionarios son opcionales). El RFC también tiene algunas diferencias pequeñas y sutiles. Por ejemplo, las representaciones truncadas de años con solo dos dígitos no están permitidas: el RFC 3339 requiere años de 4 dígitos, y el RFC solo permite que se use un carácter de punto como punto decimal durante segundos fraccionarios. El RFC también permite que la "T" sea reemplazada por un espacio (u otro carácter), mientras que el estándar solo permite que se omita (y solo cuando hay un acuerdo entre todas las partes que usan la representación).

No me preocuparía demasiado por las diferencias entre los dos, pero en caso de que su caso de uso se encuentre con ellos, valdría la pena echar un vistazo a:

ConroyP
fuente
11
Es la otra manera, ISO permite omitir 'T' pero RFC 3339 lo obliga a tools.ietf.org/html/rfc3339#page-12
Java Guy el
21
Lo siento Java Guy, pero eso no es del todo correcto. El apéndice al que hace referencia es solo informativo y la restricción es para mantener la gramática más simple. La nota al final de la sección 5.6 establece claramente que se puede usar un espacio en aras de la legibilidad, refiriéndose a la mención anterior de legibilidad que es el tema de la sección 5.2. para citar: "Las aplicaciones que usan esta sintaxis pueden elegir, en aras de la legibilidad, especificar una fecha completa y una hora completa separadas por (digamos) un carácter de espacio".
Greg A. Woods
8
@JavaGuy El apéndice al que se ha vinculado ni siquiera habla de la sintaxis RFC 3339: se titula ISO 8601 Collected ABNF y es un intento de describir formalmente la gramática de ISO 8601 usando ABNF . Nada de lo que dice debe tomarse como evidencia sobre la sintaxis de fecha y hora RFC 3339.
Mark Amery
3
FWIW: Se ha discutido en la lista de coreutils: lists.gnu.org/archive/html/bug-coreutils/2006-05/msg00019.html
Frederick Nord
9
Soy el autor con el que Justin (comentario anterior) contactó (aunque no soy responsable de la mayor parte del trabajo pesado allí). Confirmo su comentario. En general, sugeriría que los documentos de especificación como RFC3339 especifiquen en lugar de exigir : es el contexto de uso el que determina lo que se requiere . Siempre que esté claro lo que se pretende, entonces está bien hacer referencia a una producción de sintaxis específica. (Esto no es realmente diferente de lo que RFC3339 hace al hacer referencia selectiva a ISO8601). Consulte también la NOTA en la sección 5.6 .
Graham Klyne
20

RFC 3339 es principalmente un perfil de ISO 8601, pero en realidad es inconsistente con él al tomar prestada la especificación de zona horaria "-00: 00" de RFC 2822. Esto se describe en el artículo de Wikipedia.

Zefram
fuente
4

No deberías preocuparte tanto. RFC 3339, según él mismo, es un conjunto de estándares derivados de ISO 8601. Sin embargo, hay algunas diferencias mínimas, y todos están descritos en RFC 3339. Podría revisarlos todos aquí, pero probablemente lo harías mejor solo lee el documento por ti mismo en caso de que estés preocupado:

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

David Morton
fuente