Preciso de ajuda

Estou fazendo um programa de aluguel de carros para o semestre de ADS mas eu estou empacado em uma parte, que é a parte de calcular o horário armazenado no banco (horário de entrada com o carro), e o horário do sistema (horário de entrega do carro), eu fiz um código simples mas sempre da erro, segue abaixo minha tentativa.

private int CalcularBoleto(Carros c) {

    StringBuilder sb = new StringBuilder();
    GregorianCalendar d = new GregorianCalendar();
    sb.append( d.get( GregorianCalendar.HOUR_OF_DAY ) );
    sb.append( ":" );
    sb.append( d.get( GregorianCalendar.MINUTE ) );
    sb.append( ":" );
    sb.append( d.get( GregorianCalendar.SECOND ) );
    int horaini = Integer.parseInt(c.getHorario());
    int horafim = Integer.parseInt(sb.toString());
    int diferenca = horafim - horaini;
    JOptionPane.showMessageDialog(null, "O carro foi devolvido, o valor a ser pago é: "+diferenca);
    return diferenca;

}
eu tentei converter pra todos os tipos possíveis, o int foi o ultimo q tentei por isso ele está ai.
esse return diferenca, é pq eu estou usando outro método para zerar no banco as informações entregues pelo cliente.

Qual versão do java está usando? 7? 8 ou maior?

1 curtida

8.1

Acho que se refere ao Netbeans, né? Aposto que nem sabe qual a versão de jdk tem instalado…
Bom, considerando que seja a versão 8 do jdk, você já tem à sua disposição a API de datas renovada, baseada no JodaTime.
Isso faz com que você consiga manipular datas e horas muito facilmente.

String str = "1986-04-08 12:30";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
LocalDateTime dateTime = LocalDateTime.parse(str, formatter);

E, para calcular a diferença, dá uma olhada nessas opções

Desculpa eu n tinha visto direito, minha versão do jdk é a 1.7, n tenho essas bibliotecas ai, vc tem alguma solução para minha versão?

Neste caso, realmente não existe a api de datas renovada.
Então, não inventa, vai de java.util.Date mesmo:

String sDataFim = "19/11/2019 10:30";
Date dataFim = null;
try {
    dataFim = new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(sDataFim);
 } catch (ParseException ex) {
    //TODO tratar adequadamente essa exceção
}
long lDataFim = dataFim.getTime();
//Faz o mesmo para data inicial

long diff = lDataFim - lDataIni;

Aí você precisa lembrar que:
  • 1 segundo = 1000 milissegundos
  • 1 minuto = 60 segundos
  • 1 hora = 60 minutos
  • 1 dia = 24 horas

Logo, se quer saber quantos segundos foram, pega esse valor e divide por 1000.
Se precisa dos minutos foram, pega esse valor e divide em 60 * 1000
Se forem horas, pega esse valor e divide por 60 * 60 * 1000
Se precisa de dias, pega o valor e divide por 24 * 60 * 60 * 1000
Acho que é isso, se não estou enganado

obrigado vou tentar com isso