Heim >Java >javaLernprogramm >Warum konvertiert Java SimpleDateFormat AD-Daten in Januar (JJJJ/MM/TT vs. JJJJ/MM/TT)?
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!