Wie funktioniert Java "Woche Jahr" wirklich?

Dies begann als einfacher Fehler: Ich hatteYYYY Anstatt vonyyyy in meiner Formatzeichenfolge für einSimpleDateFormat Objekt. Aber die Ergebnisse meiner Tests mit der falschen Formatzeichenfolge haben mich total verblüfft.

Dieser Code:

@Test
public void whatTheHell() {
        try {
                SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/YYYY");

                Date d1 = sdf.parse("01/07/2016");
                Date d2 = sdf.parse("02/08/2016");
                Date d3 = sdf.parse("11/29/2027");

                System.out.println(d1.toString());
                System.out.println(d2.toString());
                System.out.println(d3.toString());
        } catch (ParseException pe) {
                fail("ParseException: " + pe.getMessage());
        }
}

produziert diese Ausgabe:

Sun Dec 27 00:00:00 PST 2015
Sun Dec 27 00:00:00 PST 2015
Sun Dec 27 00:00:00 PST 2026

Ich habe die Dokumentation zum Parameter 'Y' hier gelesen:https: //docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.htm, aber ich sehe immer noch nicht die Logik, die hier funktioniert. Insbesondere das letzte Beispiel: Ich kann ein bisschen verstehen, wie die Daten im Januar (und vielleicht im Februar) in den Dezember des Vorjahres übersetzt werden können, aber das Datum des 29. November um 11 Monate nach hinten zu verschieben, verwirrt mich. Und was ist das Besondere am 27. Dezember?

Kann jemand erklären?

MEHR INFORMATIONE

an schlug vor, dass es ein Problem sein könnte, sich auf die toString () -Methode zu verlassen, und ich definierte ein Datumsformat zum Drucken vonYYYY MM dd '-' yyyy MM dd im gleichen Code wie oben. Hier ist die zusätzliche Ausgabe:

2016 12 27 - 2015 12 27
2016 12 27 - 2015 12 27
2027 12 27 - 2026 12 27

Antworten auf die Frage(2)

Ihre Antwort auf die Frage