Tem vários parênteses faltando, esse código nem compila.
Se a ideia é passar 3 números, então teria que ter 3 conversões para inteiro. Além disso (chute meu, pois sem saber qual é a string retornada por getDataInicioVigencia()
, só mesmo tentando adivinhar) parece que vc está passando dia, mês e ano para o construtor de GregorianCalendar
.
Mas se vc olhar a documentação, vai ver que a ordem correta é ano, mês e dia. Além disso, o mês é indexado em zero (janeiro é zero, fevereiro é 1, etc), então teria que ser assim:
// assumindo que getDataInicioVigencia retorna uma string no formato dd/mm/aaaa
GregorianCalendar datInicioVigencia = new GregorianCalendar(
Integer.valueOf(request.getDataInicioVigencia().substring(6, 10)), // ano
Integer.valueOf(request.getDataInicioVigencia().substring(3, 5)) - 1, // mês, tem que subtrair 1 porque janeiro é zero
Integer.valueOf(request.getDataInicioVigencia().substring(0, 2)) // dia
);
Mas pra que complicar? Se a string está em determinado formato, use SimpleDateFormat
:
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try {
GregorianCalendar datInicioVigencia = new GregorianCalendar();
datInicioVigencia.setTime(sdf.parse(request.getDataInicioVigencia()));
// usa datInicioVigencia aqui
} catch (ParseException ex) {
// erro (data em formato inválido, etc)
}
Mas pra que complicar (parte 2)? Se estiver usando Java >= 8, esqueça a API legada e use as classes do pacote java.time
.
No caso, poderia usar um java.time.LocalDate
(mas também é possível converter para GregorianCalendar
, caso precise muito mesmo):
DateTimeFormatter parser = DateTimeFormatter.ofPattern("dd/MM/uuuu");
LocalDate dataInicioVigencia = LocalDate.parse(request.getDataInicioVigencia(), parser);
// mas se quiser muito converter para GregorianCalendar
GregorianCalendar cal = GregorianCalendar.from(dataInicioVigencia.atStartOfDay(ZoneId.systemDefault()));