Dúvida Calendar: get(Calendar.MONTH) retorna mês errado!

Galera, alguém pode me dizer porque raios esse programa tá imprimindo 5:

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

public class Calendario{
	
	public static void main(String args[]){
		
		Calendar calendar = new GregorianCalendar();
        calendar.setLenient(false);
            
        calendar.setTimeInMillis(new Date().getTime());
        
        System.out.println(calendar.get(Calendar.MONTH));
	}
}

tentei executar o exemplo que está na API, de GregorianCalendar, mas ele insiste em me retornar 5 para o mês, e o relógio aqui está certo.
Este problema está acontecendo mesmo quando eu pedo uma data do banco de dados, de um evento qualquer, e tento apresentar. Ele me retorna o mês errado, sempre um a menos.

não sei dizer o pq, mas os meses em java vão de 0 a 11.

[]'s

Mês da classe Calendar é 0 based, isto é, janeiro = 0, fevereiro =1, março = 3 e assim por diante.

Portando você deve somar o valor retornado mais para para ter o mês correto.

Olha só… será que é por isso então … hehehehe :XD: … magina né
Nem tinha reparado este pequeno grande detalhe :smiley:

Valeu galera…

[quote=jgbt]não sei dizer o pq, mas os meses em java vão de 0 a 11.

[]'s
[/quote]

Isso é devido à herança da linguagem C, onde a estrutura struct tm (que é mais ou menos parecida com a GregorianCalendar do Java) retorna os meses de 0 a 11. A razão é que dessa maneira, seria possível imprimir os meses usando um array de strings sem ter uma posição “desperdiçada” (motivo terrivelmente idiota, mas é herança desse tempo em que o sr. James Gosling, que afinal de contas era programador C, tentava deixar as coisas as mais compatíveis possíveis com o C).

Por exemplo:

String[] nomesMeses = {
   "janeiro", "fevereiro", ..., "dezembro"
};
System.out.println (nomesMeses[cal.get(Calendar.MONTH)]);

ué, se não fosse assim teriamos algo como

String [] meses = { “nada”, “janeiro”, “fevereiro”,…};

Essa é umas das “pegadinhas” clássicas da classe Calendar… :wink:

Acho que todo programador java já passou por isso…

[quote=wmitsuda]Essa é umas das “pegadinhas” clássicas da classe Calendar… :wink:

Acho que todo programador java já passou por isso…[/quote]

estou me sentindo menos tolo por não ter prestado atenção!

:smiley: