2010-05-31 2 views
5

Hallo Ich habe ein Problem mit GregorianCalendar.Java GregorianCalendar Was mache ich falsch? Falsches Datum?

Was ist daran falsch?

Wie ist das Ergebnis 2010/6/1 und nicht 2010/05/31?

package test; 

import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class Main { 

    public static void main(String[] args) { 
     Calendar cal = new GregorianCalendar(2010, 5, 31); 
     System.out.println(cal.get(Calendar.YEAR) + "/" + cal.get(Calendar.MONTH) + "/" + cal.get(Calendar.DAY_OF_MONTH)); 
    } 

} 

Antwort

9

Java zählt Monate von 0, also 5 ist Juni. Es ist immer sicherer, die Konstanten zu verwenden. So würde ich schreiben:

Calendar cal = new GregorianCalendar(2010, Calendar.MAY, 31); 

Das gleiche gilt für Ihren Kalenderausdruck. Wenn Sie cal.get(Calendar.MONTH) tun, erhalten Sie 6 Bedeutung JULY.

1

Dies liegt daran, dass die Monatsnummer nullbasiert ist, also versuchen Sie, den 31. Juni zu setzen, aber der Juni ist nur 30 Tage, also wird er auf den 1. Juli umgerechnet.

1

Um zu den oben genannten Antworten zu kommen, da es keinen 31. Tag im Juni gibt, wirbt der Kalender für den nächsten gültigen Tag, weil Calendar.setLenient standardmäßig true ist.