Passa al contenuto principale

3. Anni a due cifre

I seguenti requisiti affrontano i problemi di ambiguità causati dagli anni a due cifre:

Requisiti

o Gli anni a quattro cifre sono obbligatori

I protocolli Internet devono (MUST) generare anni a quattro cifre nelle date.

Esempi corretti:

✅ 2002-07-15
✅ 1999-12-31

Esempi errati:

❌ 02-07-15
❌ 99-12-31

o Gli anni a due cifre sono deprecati

L'uso di anni a due cifre è deprecato (Deprecated). Se viene ricevuto un anno a due cifre, dovrebbe (SHOULD) essere accettato solo se un'interpretazione errata non causerà un fallimento del protocollo o dell'elaborazione (ad esempio, se utilizzato solo per scopi di registrazione o tracciamento).

o Gestione degli anni a tre cifre

I programmi che utilizzano anni a due cifre possono rappresentare gli anni dopo il 1999 come tre cifre. Ciò si verificherà se il programma sottrae semplicemente 1900 dall'anno senza controllare il numero di cifre. I programmi che desiderano gestire in modo robusto le date generate da tale software difettoso possono (MAY) aggiungere 1900 agli anni a tre cifre.

Esempio:

Output del programma difettoso: 102 (che rappresenta l'anno 2002)
Analisi robusta: 102 + 1900 = 2002

o Gestione delle cifre di decennio non numeriche

I programmi che utilizzano anni a due cifre possono rappresentare gli anni dopo il 1999 come ":0", ":1", ... ":9", ";0", .... Ciò si verificherà se il programma sottrae semplicemente 1900 dall'anno e aggiunge la cifra del decennio al carattere zero US-ASCII. I programmi che desiderano gestire in modo robusto le date generate da tale software difettoso dovrebbero (SHOULD) rilevare le cifre di decennio non numeriche e interpretarle in modo appropriato.

Esempio:

Output del programma difettoso:
- '0' + 10 = ':' (che rappresenta gli anni 2000, codice ASCII 58)
- '0' + 11 = ';' (che rappresenta gli anni 2010, codice ASCII 59)

L'analisi robusta dovrebbe riconoscere questi pattern e convertirli correttamente

Lezioni dal problema Y2K

I problemi con gli anni a due cifre dimostrano ampiamente perché tutte le date e gli orari utilizzati nei protocolli Internet devono (MUST) essere completamente qualificati (Fully Qualified).


Raccomandazioni per l'implementazione

Quando si generano date

✅ Utilizzare sempre anni a quattro cifre: 2024-12-21
❌ Non utilizzare mai due cifre: 24-12-21

Quando si analizzano date

# Esempio di analisi robusta
def parse_year(year_str):
if len(year_str) == 4:
return int(year_str) # Quattro cifre corrette
elif len(year_str) == 2:
# Deprecato, solo per compatibilità con le versioni precedenti
year = int(year_str)
if year < 70:
return 2000 + year
else:
return 1900 + year
elif len(year_str) == 3:
# Gestire software difettoso
return 1900 + int(year_str)
else:
raise ValueError("Formato anno non valido")

Avvertenza: Sebbene questa sezione descriva come gestire gli anni a due cifre, ciò è solo per compatibilità con le versioni precedenti. Le nuove implementazioni non devono assolutamente (MUST NOT) generare anni a due cifre.