GregorianCalendar imprimindo mês errado

5 respostas
andre_guitar7

Estranho… to setando um mês e ele me imprime outro:

Calendar cal = new GregorianCalendar(); cal.set( Calendar.MONTH , 1 ); System.out.println( cal.get( Calendar.MONTH ) );
Façam o teste, ele imprime 2… alguém sabe o que é?

vlw

5 Respostas

Fabricio_Cozer_Marti

olhe o javadoc !

andre_guitar7

Legal… eu já olhei antes de postar o tópico… se tiver alguma dica pra me dar…

vlw

Dessa forma ele tbém imprime 2

Calendar cal = new GregorianCalendar(); cal.set( Calendar.MONTH , Calendar.FEBRUARY ); System.out.println( cal.get( Calendar.MONTH ) );

Mauricio_Linhares

Ele não está imprimindo errado, o problema é que ele está “lenient”, o que quer dizer que ele vai aceitar os valores errados que você está passando e vai “somar” as datas.

Mas qual o valor errado que você está passando?

Você está criando um GregorianCalendar com a data atual, 30/04/2006, e está tentando atribuir ele ao mês de fevereiro, mas em fevereiro não existe dia 30, então ele simplesmente soma os dias de fevereiro que sobram e passa pra março (que é o mês “2” pro Calendar).

Se você tivesse colocado a propriedade “lenient” como false, o objeto teria lançado uma exceção avisando que o valor passado estava incorreto (porque fevereiro não tem dia 30).

Nesse exemplo as coisas funcionam como você esperava que funcionassem:

Calendar cal = new GregorianCalendar();
		 cal.setLenient(false);
		 cal.set( Calendar.MONTH , Calendar.APRIL);
		 System.out.println( Calendar.APRIL== cal.get( Calendar.MONTH ) );

Como o Fabrício disse, é só ler o JavaDoc :wink:

Fabricio_Cozer_Marti

Você não leu o javadoc !

Depois dê uma pesquisada também no aqui no GUJ

andre_guitar7

Maurício Linhares:
Ele não está imprimindo errado, o problema é que ele está “lenient”, o que quer dizer que ele vai aceitar os valores errados que você está passando e vai “somar” as datas.

Mas qual o valor errado que você está passando?

Você está criando um GregorianCalendar com a data atual, 30/04/2006, e está tentando atribuir ele ao mês de fevereiro, mas em fevereiro não existe dia 30, então ele simplesmente soma os dias de fevereiro que sobram e passa pra março (que é o mês “2” pro Calendar).

Se você tivesse colocado a propriedade “lenient” como false, o objeto teria lançado uma exceção avisando que o valor passado estava incorreto (porque fevereiro não tem dia 30).

Nesse exemplo as coisas funcionam como você esperava que funcionassem:

Calendar cal = new GregorianCalendar();
		 cal.setLenient(false);
		 cal.set( Calendar.MONTH , Calendar.APRIL);
		 System.out.println( Calendar.APRIL== cal.get( Calendar.MONTH ) );

Como o Fabrício disse, é só ler o JavaDoc :wink:

Obrigado…

Criado 30 de abril de 2006
Ultima resposta 30 de abr. de 2006
Respostas 5
Participantes 3