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.