URGENTE! ABSURDO na classe Calendar

Preciso de um método que tenha como parâmetro uma data (uso uma string como entrada e dou um split por “/”, separando os campos dia, mes e ano)

Aí eu seto em uma variável tipo Calendar essa data para poder manipulá-la (creio eu ser esta a melhor maneira, jah que a classe Date está depreciada quase por completo)

Usando o Calendar.add eu poderia somar a esta data, um tempo específico:

Calendar dataEncomenda = new GregorianCalendar();
dataEncomenda.set(Calendar.DAY_OF_MONTH,Integer.parseInt(data[0]));
dataEncomenda.set(Calendar.MONTH,Integer.parseInt(data[1]));
dataEncomenda.set(Calendar.YEAR,Integer.parseInt(data[2]));

Calendar dataEntrega = dataEncomenda;
dataEntrega.add(Calendar.DAY_OF_MONTH,30);

Só que a data resultante não é validada quanto a quantidade de dias do mes… Entrando com 28/2/2005 e somando 1 ao dia ele resulta em 29/2/2005 e nao em 1/3/2005! Isso é absurdo!

Existe um jeito de isso funcionar?

Já achei o problema…
A Classe Calendar, nao sei porque cargas dágua, entende os meses como sendo do 0 ao 11 (Janeiro a Dezembro)

Não entendi o porque dessa configuração…
Tanto para setar a data do Calendar quanto para imprimi-lo ou deve-se adequar o valor ou usar um SimpleDateFormat…

Nao e configuraçao, e uma convençao. Para isso exitem cosntantes, para nao se rpender ao valor dos atributos quando eles nao tem significado (Janeiro e janeiro, nao e “1”).

De uma olahda nas cosntantes da classe e voce vai achar com o que deve trabalhar.

Está nas especificações:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html#MONTH

MONTH
public static final int MONTH
Field number for get and set indicating the month. This is a calendar-specific value. The first month of the year is JANUARY which is 0; the last depends on the number of months in a year.

Se não me engano no Date era de 1 a 12.

Permita-me discordar: split("/") não é a melhor forma de fazer isso…

import java.text.SimpleDateFormat;
import java.util.*;

public class Data{
  
   public static void main(String[] abc){
      String dataStr = "12/08/2005";
      SimpleDateFormat formatador = new SimpleDateFormat();

      formatador.applyPattern("dd/MM/yyyy");
      Date data = formatador.parse(dataStr);

      Calendar cal = GregorianCalendar.getInstance();

      cal.setTime(data);

      ...

   }
}