Heim  >  Artikel  >  Java  >  Warum konvertiert Java SimpleDateFormat AD-Daten in Januar (JJJJ/MM/TT vs. JJJJ/MM/TT)?

Warum konvertiert Java SimpleDateFormat AD-Daten in Januar (JJJJ/MM/TT vs. JJJJ/MM/TT)?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-24 07:50:29949Durchsuche

Why Does Java SimpleDateFormat Convert AD Dates to January (yyyy/MM/DD vs yyyy/MM/dd)?

Java SimpleDateFormat-Rätsel: Alle Monate standardmäßig auf Januar

Beim Parsen von Daten aus Active Directory mit Javas SimpleDateFormat tritt ein rätselhaftes Problem auf: jedes einzelne Das Datum wird fälschlicherweise in Januar umgewandelt. Fasziniert von dieser Diskrepanz wollen wir uns mit einem Codeausschnitt befassen, der das Problem veranschaulicht:

<code class="java">private Date getParsedDate(String givenString) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/DD");
    try {
        return sdf.parse(formattedString);
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
    return null;
}</code>

Beim Ausführen dieses Codes mit dem AD-Datumswert „20050912190509.0Z“ erhalten wir die unerwartete Ausgabe:

Value from AD is: 20050912190509.0Z
Formatted String is: 2005/09/12
Final date string is: Wed Jan 12 00:00:00 EST 2005

Während Tag und Jahr genau identifiziert werden, wird der Monat immer wieder mit Januar verwechselt. Welches Geheimnis liegt in diesem scheinbar einfachen Code, der zu diesem eklatanten Fehler führt?

Die Antwort liegt in einem subtilen Versehen in der SimpleDateFormat-Musterzeichenfolge. Durch die Angabe von „JJJJ/MM/TT“ erzwingen wir versehentlich, dass das Monatsformat in Großbuchstaben „MM“ angegeben wird. Der Active Directory-Datumswert verwendet jedoch Kleinbuchstaben „mm“ für Monate.

Um dieses Problem zu beheben, passen wir einfach die Musterzeichenfolge auf „yyyy/MM/dd“ mit Kleinbuchstaben „dd“ für Tage an:

<code class="java">SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");</code>

Durch diese geringfügige Änderung interpretiert SimpleDateFormat die Daten aus Active Directory korrekt und gibt die endgültige Datumszeichenfolge mit dem richtigen Monat wieder:

Value from AD is: 20050912190509.0Z
Formatted String is: 2005/09/12
Final date string is: Wed Sep 12 00:00:00 EST 2005

Diese Korrektur stellt sicher, dass SimpleDateFormat von Java korrekt analysiert Daten aus Active Directory, sodass Sie sicher mit historischen Daten arbeiten oder Berichte basierend auf bestimmten Datumsbereichen erstellen können.

Das obige ist der detaillierte Inhalt vonWarum konvertiert Java SimpleDateFormat AD-Daten in Januar (JJJJ/MM/TT vs. JJJJ/MM/TT)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn