Calendar.Month só retorna Zero

Olá Pessoal, procurei a solução, já fiz vários testes, porém, ainda estou com um problema

tenho um JTextField em um Jframe
coloquei uma máscara nele de data:

txtDtNasc = new javax.swing.JTextField(); try{javax.swing.text.MaskFormatter data = new javax.swing.text.MaskFormatter("##/##/####");txtDtNasc = new javax.swing.JFormattedTextField(data);} catch (Exception e){}

coloquei o evento FocusLost nele, para quando eu sair do campo, ele fazer o cálculo da idade do meu cliente

private void txtDtNascFocusLost(java.awt.event.FocusEvent evt) { try { int IdadeCalculada = Funcionalidade.setCalculaIdade(Funcionalidade.setFormataData(txtDtNasc.getText())); lblIdadeCalculada.setText(""+(IdadeCalculada)); } catch (ParseException ex) { Logger.getLogger(FormCliente.class.getName()).log(Level.SEVERE, null, ex); } }

note que pego o campo TxtDtNasc, pego o texto nelle contido, e passo por parametro para a classe Funcionalidade, no método setFormataData:
que uso para converter a String para Date

[code] public static Date setFormataData(String data) throws ParseException{
Date date = null;
if (data == null || data.equals(""))
return null;

    try {
        DateFormat formatar = new SimpleDateFormat("dd/mm/yyyy");
        date = (java.util.Date)formatar.parse(data);
    } catch (ParseException ex) {
        throw ex;
        }
    return date;
}[/code]

e depois passo por parametro para o método setCalculaIdade

[code]
public static int setCalculaIdade (Date DataNascimento){

  GregorianCalendar data = new GregorianCalendar();
  GregorianCalendar dataAtual = new GregorianCalendar();
 
int MesNasc; //declarei  váriavel para poder fazer alguns testes aqui

int IdadeNaoCalculada;
int IdadeCalculada;

data.setTime(DataNascimento);

   MesNasc = data.get(Calendar.MONTH);
    
    IdadeNaoCalculada = dataAtual.get(Calendar.YEAR) - data.get(Calendar.YEAR);
    
    if (MesNasc < dataAtual.get(Calendar.MONTH))//mes de nascimento é menor que o mes atual?
        IdadeCalculada = IdadeNaoCalculada;
    else if (data.get(Calendar.MONTH) > dataAtual.get(Calendar.MONTH))//mes de nascimento é maior que mes atual?
        IdadeCalculada = IdadeNaoCalculada - 1;
    else
    {
        if (data.get(Calendar.DAY_OF_MONTH) <= dataAtual.get(Calendar.DAY_OF_MONTH))//o dia do nascimentoe é menor ou igual ao dia de hoje?
            IdadeCalculada = IdadeNaoCalculada;
        else
            IdadeCalculada = IdadeNaoCalculada - 1;
    }
    return IdadeCalculada;
}[/code]

meu problema é o seguinte:
pelo que depurei aqui, o dia e o ano estão sendo passados corretamente
porém, o mês, não passa
toda vez a variável MesNasc recebe Zero

alguem sabe me dizer porque por gentileza??
Agredeço desde já!

Oi!

Só analisa com calma seu código, pois veja:

GregorianCalendar gc = new GregorianCalendar(); int month = gc.get(GregorianCalendar.MONTH) + 1; System.out.println(month);

Observe que tenho a instancia de um GregorianCalendar e uso o GregorianCalendar.MONTH.
O +1 é devido ao fato dos meses iniciarem em 0. Funcionou perfeitamente, imprimiu 8.

Abraços.

olá Nel

modifiquei a linha de código para:

MesNasc = data.get(GregorianCalendar.MONTH)+1;

MesNasc continua recebendo zero
e agora com o incremento +1, só recebe 1

independente do mês que eu colocar no JTextField

[quote=Alvaro Junqueira]olá Nel

modifiquei a linha de código para:

MesNasc = data.get(GregorianCalendar.MONTH)+1;

MesNasc continua recebendo zero
e agora com o incremento +1, só recebe 1

independente do mês que eu colocar no JTextField[/quote]

Poste o método que você faz a manipulação da data, somente ele.
Poste o mesmo com as devidas alterações ok?

o pattern

DateFormat formatar = new SimpleDateFormat("dd/mm/yyyy");

está errado.

deveria ser

DateFormat formatar = new SimpleDateFormat("dd/MM/yyyy"); // MM e não mm. mm referece a minutos

Aeee
consegui
realemente o problema era esse:

DateFormat formatar = new SimpleDateFormat("dd/MM/yyyy");

Completo ficou:

[code] public static Date setFormataData(String data) throws ParseException{
Date date = null;
if (data == null || data.equals(""))
return null;

    try {
        DateFormat formatar = new SimpleDateFormat("dd/MM/yyyy");
        date = (java.util.Date)formatar.parse(data);
    } catch (ParseException ex) {
        throw ex;
        }
    return date;
}[/code]

Muito obrigado Nel e wbdsjunior =]

use está lógica que peguei do Sergio Taborda:

public int mesesEntre(Date a , Date b ){  
    Calendar inicial = Calendar.getInstance().setTime(a);  
    int count = 0;  
    while (inicial.get(Calendar.MONTH) != b.get(Calendar.MONTH)){  
        inicial.add(Calendar.MONTH, 1);  
        count ++;  
    }  
return count;  
} 

muito obrigado lucasportela pela contribuição

vou avaliar o código!

eu tenho uma classe aqui apenas para tratar datas, vai ser bem útil a lógica empregada

gradecido =]