Qual è la differenza tra i formati di data ISO 8601 e RFC 3339?


280

ISO 8601 e RFC 3339 sembrano essere due formati comuni nel web. Dovrei usarne uno sopra l'altro? Uno è solo un'estensione? Devo davvero preoccuparmene così tanto?


42
Ho modificato il collegamento a RFC da ietf.org/rfc/rfc3339.txt alla versione HTML su tools.ietf.org/html/rfc3339 . Quando si effettua il collegamento a RFC, è sempre necessario collegarsi alle versioni HTML su tools.ietf.org/html . Non solo sono più facili da navigare grazie ai collegamenti alle sezioni, ma, soprattutto, elencano in alto tutti gli RFC che hanno aggiornato o obsoleto l'RFC che stai leggendo. Le persone citano inconsapevolmente RFC obsolete continuamente su Stack Overflow e continuerò a ripetere questo consiglio fino a quando il problema non scompare. (A scanso di equivoci, questo RFC non è obsoleto.)
Mark Amery,

Risposte:


238

Uno è solo un'estensione?

Praticamente sì - RFC 3339 è elencato come profilo ISO 8601. In particolare RFC 3339 specifica una rappresentazione completa di data e ora (solo i secondi frazionari sono opzionali). La RFC presenta anche alcune piccole e sottili differenze. Ad esempio, non sono consentite rappresentazioni troncate di anni con solo due cifre: RFC 3339 richiede anni a 4 cifre e RFC consente di utilizzare un carattere punto come punto decimale per secondi frazionari. La RFC consente inoltre di sostituire la "T" con uno spazio (o altro carattere), mentre la norma consente solo di ometterla (e solo quando esiste un accordo tra tutte le parti che utilizzano la rappresentazione).

Non mi preoccuperei troppo delle differenze tra i due, ma nel caso in cui il tuo caso d'uso li riguardi, varrebbe la pena dare un'occhiata a:


11
In un altro modo, ISO consente di omettere "T" ma RFC 3339 lo impone tools.ietf.org/html/rfc3339#page-12
Java Guy

21
Mi dispiace Java Guy, ma non è del tutto corretto. L'appendice a cui fai riferimento è solo a scopo informativo e la restrizione ha lo scopo di mantenere la grammatica più semplice. La nota alla fine della sezione 5.6 afferma chiaramente che uno spazio può essere utilizzato per motivi di leggibilità, facendo riferimento alla precedente menzione della leggibilità che è oggetto della sezione 5.2. per citare: "Le applicazioni che usano questa sintassi possono scegliere, per motivi di leggibilità, di specificare una data a tempo pieno e una a tempo pieno separate da (diciamo) un carattere spazio".
Greg A. Woods,

8
@JavaGuy L'appendice a cui ti sei collegato non parla nemmeno della sintassi RFC 3339: è intitolata ISO 8601 Raccolta ABNF ed è un tentativo di descrivere formalmente la grammatica della ISO 8601 usando ABNF . Nulla di ciò che dice dovrebbe essere preso come prova della sintassi datetime RFC 3339.
Mark Amery,

3
FWIW: È stato discusso nell'elenco coreutils: lists.gnu.org/archive/html/bug-coreutils/2006-05/msg00019.html
Frederick Nord,

9
Sono l'autore che Justin (commento precedente) ha contattato (anche se non è responsabile della maggior parte del sollevamento pesante lì). Confermo il suo commento. In generale, suggerirei che i documenti di specifica come RFC3339 specificino piuttosto che richiedere - è il contesto di utilizzo che determina ciò che è richiesto . Finché è chiaro cosa si intende, quindi fare riferimento a una produzione di sintassi specifica va bene. (Questo non è molto diverso da quello che fa RFC3339 stesso nel fare un riferimento selettivo a ISO8601.) Vedi anche la NOTA nella sezione 5.6 .
Graham Klyne,

20

RFC 3339 è principalmente un profilo di ISO 8601, ma in realtà non è coerente con esso nel prendere in prestito la specifica del fuso orario "-00: 00" da RFC 2822. Questo è descritto nell'articolo di Wikipedia.


4

Non dovresti preoccuparti così tanto. La RFC 3339, secondo se stessa, è un insieme di standard derivati ​​dalla ISO 8601. Ci sono tuttavia alcune differenze minime, e sono tutte delineate nella RFC 3339. Potrei esaminarle tutte qui, ma probabilmente faresti meglio leggendo il documento per te stesso nel caso ti preoccupi:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.