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
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