Pessoal, tenho dois campos: um contendo o periodo de vigencia do contrato (em meses) e outro campo contendo a data de início do contrato. Eu preciso que o próximo campo, término do contato seja gerado automaticamente. Como faço para executar esse calculo, sabendo que um campo está em MM e o outro em dd/MM/yyyy?
O código mais próximo que encontrei do que eu queria é este abaixo, porém há algum erro nele:
SimpleDateFormat sdf = new SimpleDateFormat(“dd/MM/yyyy”);
SimpleDateFormat sd = new SimpleDateFormat(“MM”);
Ao postar código fonte, é ALTAMENTE RECOMENDADO que você utilize a ferramenta </>, na caixa de respostas, pois ele formata seu código fonte, deixando-o mais legível e de fácil interpretação. Veja a diferença:
SimpleDateFormat sdf = new SimpleDateFormat(“dd/MM/yyyy”);
SimpleDateFormat sd = new SimpleDateFormat(“MM”);
Calendar data1 = Calendar.getInstance();
Calendar data2 = Calendar.getInstance();
try {
data1.setTime(sd.parse(txtVigencia.getText()));
data2.setTime(sdf.parse(txtInicio.getText()));
} catch (java.text.ParseException e ) {}
int vencimento = data2.get(Calendar.DATE) + data1.get(Calendar.DATE); txtTermino.setText(String.valueOf(vencimento));
Compare com o seu agora e veja qual está mais legível
Para te ajudar ainda mais, dê uma lida nesse post aqui:
Meu problema é que o usuário irá informar os seguintes campos:
a) Vigência do contrato (exemplo 6 meses)
b) Início do contrato (exemplo 04/07/2019)
Eu quero que quando ele informar a data de início a aplicação calcule a data de término no contrato com base no período de vigência informado pelo usuário.
Se o período de vigência fosse fixo eu informaria isso no código e o calculo ocorreria. O que não estou conseguindo é fazer o código ler a informação do campo “vigência” e somar ao campo “inicio do contrato” para calcular o “termino do contrato”.
Eu não quero informar o número pois ele não é fixo e depende do que for informado no campo. Se fosse fixo teria dado certo. Eu quero que ele pegue esse período de meses na JTextField e some com a data informada.
Só para esclarecer, você está estudando ou só fazendo de conta?
Por acaso sabe o que é um exemplo? Se sim, então, deixa de ser preguiçoso e faz o que precisa, seguindo o exemplo que coloquei.
Creio que você não tenha lido minha dúvida, tampouco entendido. Mas de qualquer forma, obrigado. Consegui o que eu queria, de forma diversa do que você sugeriu.
Segue o código com a solução do meu problema:
</>
int periodo = Integer.parseInt(txtVigencia.getText()); // captura o periodo em meses
int x = 0;
while (x < periodo){
String data = txtInicio.getText(); // captura a data de início do contrato
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
try {
Date date = df.parse(data);
int qtd = x; //Quantidade de meses que serão controlado pelo while
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, qtd); //faz a soma no mes baseado no valor de x
date = calendar.getTime();
data = df.format(date);
} catch (ParseException e1) {
JOptionPane.showMessageDialog(null, "");
}
x = x+1;
if (x== Integer.parseInt(txtVigencia.getText())){
String dataFinal = data;
txtTermino.setText(dataFinal); //exibe a data de vencimento do contrato
}
}