2017-06-27 3 views
0

ich ein Datum in einem Kalender-Objekt gespeichert werden soll, wie folgt aus:Java Kalender gibt falsche Monat

Calendar cal = Calendar.getInstance(); 
cal.setTimeZone(TimeZone.getTimeZone("UTC")); 
cal.set(Calendar.YEAR, 2017); 
cal.set(Calendar.MONTH, Calendar.JUNE); 
cal.set(Calendar.DAY_OF_YEAR, 26); 
cal.set(Calendar.HOUR_OF_DAY, 9); 
cal.set(Calendar.MINUTE, 0); 
cal.set(Calendar.SECOND, 0); 
cal.set(Calendar.MILLISECOND, 0); 

Alle Werte richtig eingestellt sind, mit Ausnahme des Monats, und wenn ich cal.getTime() nennen es zurückgibt:

Thu Jan 26 10:00:00 CET 2017 

Was mache ich falsch?

+1

Sie sind zwingende den Monat bei 'cal.set (Calendar.DAY_OF_YEAR, 26);' – Pau

+0

Wie gesagt, es funktioniert gut. –

+1

Verwenden Sie calendar.Day_OF_MONTH ... Day_OF_YEAR wird 26. Januar nicht JUNI – Akshay

Antwort

4

Wenn Sie DAY_OF_YEAR verwenden, legen Sie den Zahltag des aktuellen Jahres fest.

DAY_OF_YEAR Feldnummer für bekommen und stellen Sie die Tagesnummer im laufenden Jahr angibt.

Dies überschreibt alle sinnvollen Konfigurationen wie Monat oder Jahr (bis zum aktuellen Jahr und Monat des Zahltags).


Also statt Verwendung DAY_OF_YEAR können Sie DAY_OF_MONTH verwenden, die scheint, ist das, was Sie suchen, dies ist der Tag des Monats stellt Sie vor eingestellt.

DAY_OF_MONTH Feldnummer für bekommen und stellen Sie den Tag des Monats anzeigt. Dies ist ein Synonym für DATE. Der erste Tag des Monats, hat einen Wert 1.

So ist die Konfiguration, die Sie suchen definetively es scheint, wie der nächste sein würde:

Calendar cal = Calendar.getInstance(); 
cal.setTimeZone(TimeZone.getTimeZone("UTC")); 
cal.set(Calendar.YEAR, 2017); 
cal.set(Calendar.MONTH, Calendar.JUNE); 
cal.set(Calendar.DAY_OF_MONTH , 26); 
cal.set(Calendar.HOUR_OF_DAY, 9); 
cal.set(Calendar.MINUTE, 0); 
cal.set(Calendar.SECOND, 0); 
cal.set(Calendar.MILLISECOND, 0); 

Dann, wenn Sie getTime rufen Sie erhalten:

Mo 26. Juni 11.00.00 CEST 2017

1

Wie in "Why Java Calendar set(int year, int month, int date) not returning correct date?" dies erwähnt ist eine einfache Möglichkeit, ein Kalenderobjekt zu initialisieren.

Calendar cal = Calendar.getInstance(); 
cal.setTimeZone(TimeZone.getTimeZone("UTC")); 
cal.set(2017, Calendar.JUNE, 26, 9, 0, 0); 
cal.set(Calendar.MILLISECOND, 0); 


System.out.println(cal.getTime()); 

Mo 26. Juni 11.00.00 CEST 2017

+0

Dies könnte ein Kommentar/Vorschlag sein ... es löst nicht das Problem von OP – Akshay

+1

. Der Code setzt das Kalenderobjekt in den gewünschten Status. –

+0

Jetzt sind Sie dran, man könnte denken, dass [die 6-Arg 'set' Methode] (http://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html#set -int-int-int-int-int-int-) ist noch bequemer. Dann müssen Sie nur die Millisekunden separat einstellen. –

Verwandte Themen