Problemas com datas

Tenho esse método que formata datas

public Calendar formatDate(String date){
  
    // Pegando a data     
    //Quebrando a data para buscar ano , mes e ano
    String [] aData = date.split("/");
    // Setando no objeto Calendar o mes , dia e ano
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.DAY_OF_MONTH , Integer.parseInt(aData[0]));
    cal.set(Calendar.MONTH , Integer.parseInt(aData[1]));
    cal.set(Calendar.YEAR , Integer.parseInt(aData[2]));
    return cal;
 }

Quando faço:
String data = “22/12/2006”;
System.out.println(this.formatDate(data).MONTH);

Pq Ele me retorna 2 e não 12?

Porque os meses em Calendar vão de 0 a 11 e quando você setou 12 ele se confundiu. Tente colocar:

cal.set(Calendar.MONTH , Integer.parseInt(aData[1]) - 1);
De qualquer maneira, dê uma olhada no SimpleDateFormat que ele já faz isso que você quer.

Olha q eu fiz para teste!

String data = "10/12/2006"; System.out.println(this.formatDate(data)); System.out.println(this.formatDate(data).MONTH);

Ele está gravando certo, o q está errado?

Olá,

Como disse o David na classe Calendar os meses vão de 0 a 11.

Ou seja 0 é Janeiro, etc.

Por exemplo, se você fizer um:

System.out.println(new GregorianCalendar());

aqui imprime:

MONTH=10

O método toString da classe Calendar imprime os valores dos campos internos da classe. Ele imprime aquele 12 que você setou, mas o valor correto para Dezembro seria 11.

[]s,
Sami

Além disso, para obter o mês do objeto Calendar você deveria usar

objetoCalendar.get(Calendar.MONTH);

e não

objetoCalendar.MONTH

Ou seja, não só o seu código tava com problema, mas o teste também não tava correto :wink:

Opa, nem tinha notado isso. O problema mais grave é esse citado pela colega.

Calendar.MONTH é um constante, utilizado para referir ao campo mes da classe Calendar.

[]s,
Sami

Boa, s4nchez, eu também não tinha percebido.

Galera,

Valeu pela ajuda!

Farei testes hj à noite!

abs.

int Dia;
int Mes;
int Ano;

Dia = Integer.parseInt(FTFDataNascimento.getText().substring(0,2));
Mes = Integer.parseInt(FTFDataNascimento.getText().substring(3,5));
Ano = Integer.parseInt(FTFDataNascimento.getText().substring(6,10));
GregorianCalendar MontaData = new GregorianCalendar(Ano,Mes-1,Dia);
Date xDataNascimento = new Date( MontaData.getTimeInMillis());

depois e só dar um INSERT na variável…

Como o David havia dito, só pra exemplificar …

java.text.DateFormat df = java.text.SimpleDateFormat.getDateInstance(
	java.text.DateFormat.MEDIUM, 
	new java.util.Locale("pt", "BR"));

java.util.Date data = df.parse("10/12/2006");

System.out.println(data.toString());
//Sun Dec 10 00:00:00 BRST 2006