Frage

Heute ist Dienstag, 9. Februar 2010 und wenn ich das Datum drucke, das ich falsch erhalte:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

Date today = formatter.parse(String.format("%04d-%02d-%02d",
        Calendar.getInstance().get(Calendar.YEAR),
        Calendar.getInstance().get(Calendar.MONTH),
        Calendar.getInstance().get(Calendar.DAY_OF_MONTH)));

System.out.println("Today is " + today.toString());

Die Drucklinie ergibt sich: "Heute ist Sa 09. Januar 00:00:00 CST 2010"

Es ist mit Sicherheit nicht am Samstag, den 09. Januar, es ist Dienstag, 0. Februar. Ich gehe davon aus, dass ich etwas falsch mache. Kann mich jemand wissen lassen, was hier los ist? Muss ich den Wochentag manuell einstellen?

Aktualisieren Hinweis: Ich möchte heute nicht mit initialisieren new Date() Weil ich die Stunden, Minuten, Sekunden und Millisekunden initialisiert habe 0. Dies ist notwendig, damit ich ein Benutzereingabedatum heute vergleichen kann new Date() und ich vergleiche die beiden Daten- heute wird es sein nach Der Benutzer wurde ausgewählt (was falsch ist). Daher muss ich heute zu Beginn des Tages ohne HR/min/ms/ms initialisieren.

War es hilfreich?

Lösung

Verwirrend zählen die Kalendermonate von 0 (Januar) bis 11 (Dezember), sodass Sie "2010-01-09" an formatter.Parse (), wenn Sie das Monatsfeld aus dem Kalender extrahieren.

Es gibt eine Diskussion darüber in einem verwandten Also Frage.

Andere Tipps

Wenn Sie Jodatime nicht verwenden möchten, könnten Sie verwenden:

Calendar calendar = Calendar.getInstance();

calendar.set( Calendar.HOUR_OF_DAY, 0 );
calendar.set( Calendar.MINUTE, 0 );
calendar.set( Calendar.SECOND, 0 );
calendar.set( Calendar.MILLISECOND, 0 );

Date today = calendar.getTime();

Dies ist viel effizienter und weniger fehleranfälliger als Ihr Ansatz für String-Formatierung/Parsen.

Wenn Sie Jodatime verwenden können, ist dies eine viel bevorzugte Methode:

LocalDate date = new DateTime().toLocaleDate();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top