ISO 8601

Da Wikipedia, l'enciclopedia libera.
Esempio: data ed ora UTC
2014-08-27T09:22Z

L'ISO 8601 (Data elements and interchange formats - Information interchange - Representation of dates and times) è uno standard internazionale per la rappresentazione di date ed orari.

Cenni storici[modifica | modifica sorgente]

Questo standard fu pubblicato per la prima volta il 15 giugno 1988 per uniformare diversi vecchi standard ISO: 2014, 2015, 2711, 3307 e 4031. Fu aggiornato il 21 dicembre 2000, e successivamente con la norma attuale ISO 8601:2004 pubblicata il 3 dicembre 2004.

La notazione numerica big-endian delle date fu introdotta dall'ISO 2014, l'ISO 2015 introduce il sistema di numerazione delle settimane, mentre nel ISO 2711 i giorni venivano identificati dai numeri ordinali.

La necessità di uno standard nasce dal fatto che la data 04-09-03, può indicare:

  • 04 settembre 2003 (o addirittura 1903) in Europa ed altri paesi,
  • 09 aprile 2003 negli Stati uniti d'America,
  • 03 settembre 2004 secondo lo standard ISO 8601 (nota: la possibilità di scrivere l'anno con solo due cifre, prevista nella versione del 2000, è stata tolta nella versione 2004),

Come si può facilmente capire questo fatto può creare molti problemi nei commerci e nelle comunicazioni internazionali.

Principi generali[modifica | modifica sorgente]

I valori delle date e degli orari sono organizzati da quello più significativo a quello meno. Ogni valore (di anni, mesi, minuti, ...) deve avere un numero fisso di cifre che può essere raggiunto aggiungendo zeri; ad esempio il 3 settembre 2006 deve essere scritto 2006-09-03 e non 2006-9-3.

Sono possibili due tipi di rappresentazione: la forma base con il minor numero di caratteri, la forma estesa per una maggiore facilità di lettura da parte dell'utente umano. Ad esempio 2005-07-24 è in forma estesa, mentre in forma base è 20050724, questo è possibile senza ambiguità appunto perché ogni valore deve avere un numero fisso di cifre.

I parametri meno significativi possono essere omessi, in questo modo 2004-05 indica "maggio 2004". Infine, lo standard permette di usare valori decimali nei secondi quando è richiesta un'alta precisione.

Date[modifica | modifica sorgente]

L'ISO 8601 usa il calendario gregoriano, che è de facto uno standard nei commerci internazionali.

Il calendario gregoriano viene usato anche per le date precedenti il 15 ottobre 1582 (1582-10-15), data di introduzione da parte di papa Gregorio XIII di questo calendario. Il giorno precedente, 4 ottobre 1582 secondo il calendario giuliano, viene quindi indicato come 1582-10-14.[1]

Si tratta quindi di un calendario gregoriano analettico (analettico nel senso di ricostruito, retrodatato).

Anni[modifica | modifica sorgente]

±YYYY

Lo standard prevede l'uso di quattro cifre per evitare il millennium bug, ovvero una ambiguità nell'indicazione dell'anno. Gli anni avanti Cristo (a.C.) devono obbligatoriamente essere preceduti da un segno -, per quelli dopo Cristo (d.C.) è possibile, ma non obbligatorio, mettere un segno +.

Per gli anni avanti Cristo la norma ISO adotta la notazione degli astronomi che prevede l'anno zero, assente nella notazione degli storici; l'anno 1 a.C. viene indicato con 0000, l'anno 2 a.C. con -0001 e così via; p.es. la data 1 marzo 1 a.C. si scrive 0000-03-01. la data 1 marzo 2 a.C. si scrive -0001-03-01.

La versione ISO 8601:2000 dava la possibilità di scrivere l'anno con solo due cifre,ma questa forma è stata soppressa nella versione 2004 in cui si devono usare sempre almeno quattro cifre.

Settimane[modifica | modifica sorgente]

YYYY-Www o YYYYWww
YYYY-Www-D o YYYYWwwD

Un altro modo per indicare la data previsto dall'ISO 8601 è attraverso la settimana. Il formato inizia con l'anno [YYYY], poi la lettera "W" in maiuscolo seguita dal numero della settimana [WW] da 01 a 53; alcuni anni finiscono alla settimana 52. Può essere indicato anche il giorno della settimana [D] con una cifra da 1 per lunedì a 7 per la domenica. Questa forma è molto usata all'interno delle aziende.

La settimana 01 dell'anno è definita come (sono tutte equivalenti):

  • la settimana che contiene il primo giovedì dell'anno,
  • la settimana che contiene il 4 gennaio,
  • la prima settimana che contiene quattro, o più, giorni del nuovo anno,
  • la settimana che inizia con il lunedì fra il 29 dicembre ed il 4 gennaio,
  • se il 1º gennaio è un lunedì, martedì, mercoledì o giovedì allora è nella settimana 01. Se capita di venerdì, sabato o domenica allora è nell'ultima settimana (la 52 o 53) dell'anno passato.

Il numero della settimana può essere calcolato contando i giovedì: la settimana 12 contiene il dodicesimo giovedì dell'anno.

Formule per fogli elettronici[modifica | modifica sorgente]

Quelle che seguono sono formule per fogli elettronici per calcolare l'anno ISO e la settimana ISO di un giorno (testate su Microsoft Excel 2007 italiano e Apache OpenOffice Calc 3.4.0 italiano). A1 è la cella che contiene la data da considerare:

  • ANNO.ISO(A1) = ANNO(A1 - GIORNO.SETTIMANA(A1;2) + 4)

(anno gregoriano del giovedì della stessa settimana di A1)

  • SETTIMANA.ISO(A1) = 1 + (A1 - GIORNO.SETTIMANA(A1;2) - DATA(ANNO(A1 - GIORNO.SETTIMANA(A1;2) + 4);1;4) + GIORNO.SETTIMANA(DATA(ANNO(A1 - GIORNO.SETTIMANA(A1;2) + 4);1;4);2)) / 7

(distanza in settimane tra il primo giovedì dell'anno ISO e il giovedì della stessa settimana di A1).

Per visualizzare correttamente la settimana occorre selezionare Generale o Numero come Categoria in Formato celle.

Data completa[modifica | modifica sorgente]

YYYY-MM o YYYYMM
YYYY-MM-DD o YYYYMMDD

La data completa è la forma più familiare per la maggior parte delle persone. Come detto sopra [YYYY] indica l'anno in modo univoco. [MM] indica il mese in cifre, da 01 a 12. [DD] indica il giorno del mese, da 01 a 31. Ad esempio il "5 aprile 1981" può essere scritto come 1981-04-05 in forma estesa o 19810405 in forma base.

Lo standard permette anche di usare minor precisione. Ad esempio si può scrivere "1981-04" per riferirsi al mese "aprile 1981"; oppure semplicemente "1981" per indicare l'anno.

L'anno ISO inizia il lunedì della settimana 01 e termina la domenica prima dell'inizio del nuovo anno ISO. Contiene 52 o 53 settimane complete. Il numero dell'anno ISO è differente da quello dell'anno gregoriano al massimo nei primi venerdì, sabato e domenica del nuovo anno; e gli ultimi lunedì, martedì e mercoledì del vecchio anno. Il giovedì l'anno ISO è sempre uguale a l'anno gregoriano. Esempi:

  • 2008-12-29 è il "2009-W01-1",
  • 2010-01-03 è il "2009-W53-7".

Date ordinali[modifica | modifica sorgente]

YYYY-DDD o YYYYDDD

Le date ordinali sono una forma semplice per rappresentare un giorno specifico senza indicare il numero della settimana o del mese. Questa rappresentazione prevede l'anno [YYYY] ed il numero del giorno [DDD] da 001 a 365 o 366 negli anni bisestili. Ad esempio "1981-095" sta per "1981-04-05" (05 aprile 1981).

Questo sistema è frequentemente, ma non in modo corretto, riferito al giorno giuliano.

Sviluppi futuri[modifica | modifica sorgente]

Lo standard prevede che, previo accordo fra le parti in comunicazione, possono essere usate più di quattro cifre per indicare l'anno. Serve per rappresentare anni prima del 10001 a.C. o dopo il 10000. Tuttavia si possono creare ambiguità se si usa la forma base, senza separatori. Ad esempio "200406" può indicare l'anno 200406 o "giugno 2004". L'ISO suggerisce di usare una forma di comunicazione esplicita per evitare tali confusioni, dato anche il numero minimo di casi che si vengono a creare.

Orari[modifica | modifica sorgente]

hh:mm:ss o hhmmss
hh:mm o hhmm
hh

L'ISO 8601 usa il sistema a 24 ore come la maggior parte del mondo. La forma base è [hh][mm][ss], mentre la forma estesa è [hh]:[mm]:[ss]. [hh] indica l'ora tra le 00 e le 23, [mm] si riferisce ai minuti da 00 a 59, e [ss] i secondi sempre tra 00 e 59. Esistono due eccezioni: la mezzanotte può essere indicata con la forma 24:00:00, ed i secondi possono arrivare a 60 nel caso del minuto di 61 secondi.

Se non sono necessari possono essere omessi i valori meno significativi, ovvero usare le forme [hh]:[mm] oppure [hh].

Si possono indicare anche valori decimali usando la virgola (l'uso del punto è ammesso ma sconsigliato), ad esempio 03:14:30 si può scrivere 03:14,5 oppure, in forma base, 0314,5.

La mezzanotte è un caso speciale, lo stesso istante può essere indicato in due modi diversi; le scritte "1981-04-05T24:00" e "1981-04-06T00:00" sono equivalenti. La notazione "00:00" è usata all'inizio del giorno, mentre "24:00" alla fine dello stesso.

Fuso orario[modifica | modifica sorgente]

<orario>Z
<orario>±hh:mm:ss o <orario>±hhmmss
<orario>±hh:mm o <orario>±hhmm
<orario>±hh

Se non ci sono indicazioni riguardo al fuso orario si assume che sia quello locale. Questo non crea problemi se la comunicazione avviene fra due persone della stessa zona, ma può creare ambiguità nelle transazioni internazionali; per questo si consiglia di indicare il fuso orario con la notazione standard.

UTC[modifica | modifica sorgente]

Se l'orario è rispetto UTC basta aggiungere una "Z" dopo le cifre, senza spazi. Ad esempio "14:45:15 UTC" può essere scritto come "14:45:15Z" oppure "144515Z".

Altre zone[modifica | modifica sorgente]

Le altre zone sono espresse indicando la differenza rispetto a UTC nella forma ±[hh]:[mm], ±[hh][mm] o ±[hh]. Ad esempio l'ora solare (invernale) italiana è indicata come "+01:00", "+0100" o semplicemente "+01", mentre quella legale con "+02:00", "+0200" oppure "+02". Quando si scrive un orario si deve indicare solo l'attuale differenza rispetto l'UTC, quindi varia nel corso dell'anno.

Questi orari indicano tutti lo stesso istante: "18:30Z", "22:30+04", "1130-0700" e "15:00-03:30".

Rappresentazioni combinate[modifica | modifica sorgente]

T<orario>

Per rappresentare assieme data ed orario è molto semplice, basta inserire una "T" fra la data e l'ora indicate con le proprie regole. Di solito si usa la forma [YYYY]-[MM]-[DD]T[hh]:[mm]:[ss]±[hh]:[mm], come ad esempio "1981-04-05T14:30:30-05:00" (in forma base "19810405T143030-0500").

A volte data ed ora vengono rappresentati non divisi dalla "T", ma da uno spazio, questo per permettere una più facile lettura umana; tecnicamente però non è una rappresentazione combinata, ma solo due rappresentazioni semplici poste vicino.

Durate[modifica | modifica sorgente]

PnnYnnMnnDTnnHnnMnnS
PnnYnnWnnDTnnHnnMnnS
PT<orario>

Periodi e durate sono rappresentate nel formato P[n]Y[n]M[n]DT[n]H[n]M[n]S (o P[n]Y[n]W[n]DT[n]H[n]M[n]S se si usano le settimane), dove [n] è un numero appropriato per l'elemento che segue; le lettere maiuscole devono essere riportare così come sono. Se il valore di un elemento è zero questo può essere omesso, ma inserirlo può facilitare la comprensione. Da notare che "P1M" rappresenta un mese, mentre "PT1M" un minuto. Esempio "P3Y6M4DT12H30M0S" indica un periodo di tre anni, sei mesi, quattro giorni, dodici ore, trenta minuti e zero secondi. Anche qui possono essere usati valori decimali, infatti "P0,5Y" indica metà anno. Alternativamente può essere usata la forma P[YYYY]-[MM]-[DD]T[hh]:[mm]:[ss]; e l'esempio sopra diventa "P0003-06-04T12:30:00".

Intervallo di tempo[modifica | modifica sorgente]

<inizio>/<fine>
<inizio>/<durata>
<durata>/<fine>
<durata>

Un intervallo di tempo può essere rappresentato in quattro modi:

  1. inizio e fine: "2002-03-01T13:00:00Z/2003-05-11T15:30:00Z",
  2. inizio e durata: "2002-03-01T13:00:00Z/P1Y2M10DT2H30M",
  3. durata e fine: "P1Y2M10DT2H30M/2003-05-11T15:30:00Z",
  4. solo la durata: "P1Y2M10DT2H30M".

Di queste forme, le prime tre richiedono due parti i cui valori sono separati dalla barra "/" (è ammesso anche il doppio tratto -- ma l'uso è sconsigliato). Se nella seconda parte mancano alcuni valori, questi sono considerati uguali a quelli della prima parte.

Intervalli ripetuti[modifica | modifica sorgente]

Rnn/<intervallo>
R/<intervallo>

Per ripetere un intervallo si inserisce "R[n]/" prima dell'espressione dell'intervallo, dove [n] rappresenta il numero di ripetizioni.. Ad esempio per ripetere l'intervallo "P1Y2M10DT2H30M" cinque volte partendo da "2002-03-01T13:00:00Z", si scrive "R5/2002-03-01T13:00:00Z/P1Y2M10DT2H30M".

Uso[modifica | modifica sorgente]

In Internet, l'ISO 8601 è usato dal W3C, per definire uno standard che limita la possibilità di errore e riduce la complessità del software.[2]

La RFC 3339 definisce un profilo dell'ISO 8601 che può essere usato nella suite di protocolli Internet. Escude esplicitamente l'uso di durate e date avanti Cristo. Usa la notazione [hh]:[mm]:[ss]-00:00 per indicare il fuso orario locale se sconosciuto. I formati più complessi come quelli che usano le settimane o le dati ordinali sono scoraggiati.

L'ISO 8601 è richiamato in molte altre specifiche tecniche, ma non sempre sono ammesse tutte le varianti che lo standard prevede.

Varianti[modifica | modifica sorgente]

Alcune volte si possono trovare nell'uso comune delle varianti a questo standard.

Ad esempio usare lo zero per indicare la domenica, nei paesi in cui, per consuetudine, la settimana inizia con questo giorno.

Oppure inserire una lettera da "A" a "G" dopo la data per indicare il giorno della settimana, ad esempio scrivere "2001-001A" che significa "Lunedì, 1º gennaio 2001". Questa lettera sostituisce la "T" nelle rappresentazioni combinate di data ed orario.

Altra variante, usando le settimane, è di dividere il mese in quattro o cinque settimane, anziché l'intero anno. Anche questa forma, come quella ufficiale, può essere seguita da una cifra che indica il giorno della settimana, da 1 per lunedì a 7 per la domenica.

Alcuni dividono l'anno in quadrimestri, ognuno formato da tre mesi interi, e vengono indicati con "Qq", dove la maiuscola rimane tale, la minuscola viene sostituita da una cifra da 1 a 4. Questo riferimento può essere usato in uno qualsiasi dei formati per le date precedentemente visti.

Note[modifica | modifica sorgente]

  1. ^ Si ricorda che con l'introduzione del calendario gregoriano si passò dal 4 ottobre 1582 al 15 ottobre 1582, saltando 10 giorni.
  2. ^ (EN) Date and Time Formats, W3C. URL consultato il 4 agosto 2011.

Voci correlate[modifica | modifica sorgente]

Collegamenti esterni[modifica | modifica sorgente]