Problema para formatar data helppp

Pessoal, estou com o seguinte problema:
Tenho uma data na base de dados, por exemplo: 12-09-2009
Mais minha rotina ta mostrando 12-08-2009 1 dia a menos do que tenho na base.
O código que eu uso para formatar a data é:

Calendar calTmp = Calendar.getInstance(); calTmp.add(Calendar.MONTH, -6); Date farViewLimit = calTmp.getTime(); calTmp = Calendar.getInstance(); calTmp.add(Calendar.WEEK_OF_YEAR, -2); Date recentViewLimit = calTmp.getTime();

e para mostrar a data é:

<td class="<%=rowClass%>"><dt:format patternId='datePattern' localeRef='localeRef' timeZone='tz'><bean:write name='currentContactMarketReport' property='dateProchainEnvoi.time'/></dt:format>&nbsp;</td>

Alguem tem idéia do porque mostra um dia a menos ??

Obrigado!

Tenta dessa forma que funciona.

Calendar calTmp = Calendar.getInstance();  
		int mes = calTmp.get(Calendar.MONTH) + 1;
		calTmp.add(mes, -6);   
		Date farViewLimit = calTmp.getTime();   
		calTmp = Calendar.getInstance();   
		calTmp.add(Calendar.WEEK_OF_YEAR, -2);   
		Date recentViewLimit = calTmp.getTime();  

os meses são contados de 0 á 11 pelo Calendar, GregorianCalendar …ai você precisa acrescentar um a data atual.

Abs,
Carlos

Só pra deixar uma coisa clara.

Não sei se é o caso, mas vejo gente escrevendo Gregorian Calendar aqui pra justificar a contagem de 0 a 11.

Gregorian Calendar é o calendário normal que a gente usa! De Janeiro a Dezembro, de 1 a 12 com os números de dias que conhecemos nos meses, em oposição ao calendário Juliano, que era utilizado anteriormente.

Esse lance de 0 a 11 não tem nada a ver com Gregorian Calendar, é coisa da classe Calendar do java.

O fato de java.util.Calendar retornar 0 para Calendar.JANUARY é um vestígio de como essas coisas são tratadas em C. Gostaria de saber por que cargas d’água a “struct tm” define janeiro como 0:

time.h

Pablo,
Então esse codigo abaixo deveria me retornar o mês 12 … ja que ele conta do 1 ao 12.
porque será que retorna 11 ?

GregorianCalendar data = new GregorianCalendar();
int mes = data.get(GregorianCalendar.MONTH) ;
System.out.println(mes);

explica para gente ai …
abs,
Carlos

O código que você postou não funciona. O correto é fazer isto aqui:

 GregorianCalendar data = new GregorianCalendar();  
 int mes = data.get(GregorianCalendar.MONTH)  + 1;  
 System.out.println(mes); 

Pois Calendar.JANUARY = 0, não 1.

Opa . .
eu sei que não funciona . .
mandei me baseando na correção que o PabloSairava fez no topico dizendo :

[size=9]**Só pra deixar uma coisa clara.

Não sei se é o caso, mas vejo gente escrevendo Gregorian Calendar aqui pra justificar a contagem de 0 a 11.

Gregorian Calendar é o calendário normal que a gente usa! De Janeiro a Dezembro, de 1 a 12 com os números de dias que conhecemos nos meses, em oposição ao calendário Juliano, que era utilizado anteriormente.

Esse lance de 0 a 11 não tem nada a ver com Gregorian Calendar, é coisa da classe Calendar do java. **[/size]

abs,
Carlos

Prezado caraujocruz,

Calendário Gregoriano é o calendário que a gente usa. Janeiro é 1, Fevereiro é 2 etc. Dê uma lida no link abaixo.

http://en.wikipedia.org/wiki/Gregorian_calendar

O Calendar do java retorna de 0 a 11 não por ser gregoriano, e sim por ter sido implementado assim.

E sim, no calendar do Java janeiro é o mês 0. Por isso, continue somando 1 (e não esqueça de subtrair 1 na hora de jogar o valor de volta pro calendar, se for o caso).

Tudo bem eu entendi .
mais isso e so na teoria roda esse codigo ai e ele vai te retornar os meses de 0 a 11.

	public static void mesAtual() {

		Date dataAtual = new Date();
		GregorianCalendar data = new GregorianCalendar();
		
		int mes = data.get(GregorianCalendar.MONTH) ;

		
		for (int i = 0; i <12 ; i++) {
			
			
			System.out.println(mes);
			mes--;
			
		}

	}

se preferir muda seu calendar para janeiro e tira esse for … ele vai te retornar o mês como 0 .
entao tecnicamente deve se usar (GregorianCalendar.MONTH) +1 para retornar os mês da forma que usamos.

Abs,
Carlos