Zum Hauptinhalt springen

3. Zweistellige Jahreszahlen

Die folgenden Anforderungen behandeln die Mehrdeutigkeitsprobleme, die zweistellige Jahreszahlen verursachen:

Anforderungen

o Vierstellige Jahreszahlen sind obligatorisch

Internetprotokolle müssen (MUST) vierstellige Jahreszahlen in Daten generieren.

Korrekte Beispiele:

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

Falsche Beispiele:

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

o Zweistellige Jahreszahlen sind veraltet

Die Verwendung zweistelliger Jahreszahlen ist veraltet (Deprecated). Wenn eine zweistellige Jahreszahl empfangen wird, sollte (SHOULD) sie nur akzeptiert werden, wenn eine Fehlinterpretation keinen Protokoll- oder Verarbeitungsfehler verursacht (z. B. wenn sie nur für Protokollierungs- oder Verfolgungszwecke verwendet wird).

o Handhabung dreistelliger Jahreszahlen

Programme, die zweistellige Jahreszahlen verwenden, können Jahre nach 1999 als dreistellig darstellen. Dies tritt auf, wenn das Programm einfach 1900 vom Jahr subtrahiert, ohne die Anzahl der Ziffern zu überprüfen. Programme, die Daten, die von solch fehlerhafter Software generiert wurden, robust verarbeiten möchten, können (MAY) 1900 zu dreistelligen Jahreszahlen hinzufügen.

Beispiel:

Fehlerhafte Programmausgabe: 102 (stellt das Jahr 2002 dar)
Robuste Analyse: 102 + 1900 = 2002

o Handhabung nicht-numerischer Dekadenziffern

Programme, die zweistellige Jahreszahlen verwenden, können Jahre nach 1999 als ":0", ":1", ... ":9", ";0", ... darstellen. Dies tritt auf, wenn das Programm einfach 1900 vom Jahr subtrahiert und die Dekadenziffer zum US-ASCII-Zeichen Null hinzufügt. Programme, die Daten, die von solch fehlerhafter Software generiert wurden, robust verarbeiten möchten, sollten (SHOULD) nicht-numerische Dekadenziffern erkennen und entsprechend interpretieren.

Beispiel:

Fehlerhafte Programmausgabe:
- '0' + 10 = ':' (stellt die 2000er Jahre dar, ASCII-Code 58)
- '0' + 11 = ';' (stellt die 2010er Jahre dar, ASCII-Code 59)

Robuste Analyse sollte diese Muster erkennen und korrekt konvertieren

Lehren aus dem Y2K-Problem

Die Probleme mit zweistelligen Jahreszahlen zeigen deutlich, warum alle in Internetprotokollen verwendeten Daten und Zeiten vollständig qualifiziert (Fully Qualified) sein müssen (MUST).


Implementierungsempfehlungen

Beim Generieren von Daten

✅ Immer vierstellige Jahreszahlen verwenden: 2024-12-21
❌ Niemals zwei Ziffern verwenden: 24-12-21

Beim Parsen von Daten

# Beispiel für robustes Parsing
def parse_year(year_str):
if len(year_str) == 4:
return int(year_str) # Korrekte vier Ziffern
elif len(year_str) == 2:
# Veraltet, nur für Rückwärtskompatibilität
year = int(year_str)
if year < 70:
return 2000 + year
else:
return 1900 + year
elif len(year_str) == 3:
# Fehlerhafte Software handhaben
return 1900 + int(year_str)
else:
raise ValueError("Ungültiges Jahresformat")

Warnung: Obwohl dieser Abschnitt beschreibt, wie zweistellige Jahreszahlen behandelt werden, dient dies nur der Rückwärtskompatibilität. Neue Implementierungen dürfen absolut keine (MUST NOT) zweistelligen Jahreszahlen generieren.