Calcular entrada e saida de veiculo

1 resposta
java
Lucas_Matos

olá a todos, necessito de uma forma para calcular o tempo decorrido de um veículo no estacionamento. ou seja calcular a hora de entrada e saída e multiplicar pelo valor do cupom. só que se o valor do cupom for $10,00 a hora, e o veiculo não ficou 01:00 no estacionamento o sistema deve cobrar a metade. e se ficou mais tempo deve ir somando. o meu problema está relacionado a esse método. fiz um método que faz algo parecido más me retorna valores estranhos como resultado. se alguém souber uma forma de fazer esse método retorna os valores certos de acordo com o tempo decorrido agradeço.

segue o código

public String calcular(String entrada, String saida){
        DecimalFormat df = new DecimalFormat("0.00");
        NumberFormat nf = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));          
        
        Date data = new Date();
        nf.setMinimumFractionDigits(0);
        nf.setMaximumFractionDigits(0);
        
        entrada = getHora().replace(":", "").trim();
        saida = HoraSaida().replace(":", "").trim();        
        
        int h1 = (Integer.parseInt(entrada));
        int h2 = (Integer.parseInt(saida));
        
        //if(h2 > h1){           
            result = (Double.parseDouble(saida) - Double.parseDouble(entrada)) * getValorH();
            format = nf.format(result).replace("-", "").replace(".", "");          
            setLucro(result);
//        }else{            
//            format = "Horários não coincidem!";
//        }      
        return format;

retorno do método
image

1 Resposta

I

Eu costumo usar substrings para separar as horas, os minutos e os segundos. Por exemplo:

import java.text.NumberFormat;

public class Estacionamento {
	private static final double VALOR = 10.00;
	
	private double obterTempoEmHoras(String dataInformada){
		double hora;
		double minuto;
		double segundo;
		
		hora = Double.parseDouble(dataInformada.substring(0, 2));
		minuto = Double.parseDouble(dataInformada.substring(3, 5));
		segundo = Double.parseDouble(dataInformada.substring(6, 8));
		
		return (segundo / 3600) + (minuto / 60) + hora;
	}
	
	private double calcularValor(double intervalo){
		if(intervalo <= 1)
			return (intervalo * VALOR) / 2;
		
		return intervalo * VALOR;
	}
	
	private void exibirTempoPermanencia(double tempoPermanencia){
		int hora = (int) tempoPermanencia;
		int minuto = (int) ((tempoPermanencia - hora) * 60);
		int segundo = (int) ((((tempoPermanencia - hora) * 60) - minuto) * 60);
		String horaString;
		String minutoString;
		String segundoString;
		
		horaString = (hora == 0) ? "00" : String.valueOf(hora);
		minutoString = (minuto == 0) ? "00" : String.valueOf(minuto);
		segundoString = (segundo == 0) ? "00" : String.valueOf(segundo);
		
		System.out.println("Tempo de permanência: " 
			+ horaString + ":" + minutoString + ":" + segundoString);
	}
	
	public static void main(String[] args){
		Estacionamento estacionamento = new Estacionamento();
		NumberFormat nf = NumberFormat.getCurrencyInstance(new java.util.Locale("pt", "BR"));
		
		double entrada = estacionamento.obterTempoEmHoras("13:08:21");
		double saida = estacionamento.obterTempoEmHoras("14:29:06");
		double intervalo = saida - entrada;
		
		estacionamento.exibirTempoPermanencia(intervalo);
		System.out.println("Valor a ser pago: " + nf.format(estacionamento.calcularValor(intervalo)));
	}
}

Rodando: image

Criado 13 de abril de 2020
Ultima resposta 13 de abr. de 2020
Respostas 1
Participantes 2