Pegar a diferença de dias entre uma data e outra

4 respostas
MestreJava

Preciso Pegar a diferença de dias entre uma data e outra para aplicar multa por atraso em um sistema de locadora. Como fazer isso?

4 Respostas

Guilherme_Gomes

O jeito que eu acho mais facil e direto de fazer isso seria:

public long getDiferencaEmDias(Date d1, Date d2){
    long vDia = 1000 /* milisegundos */ * 60 /* segundos */ * 60 /* minutos */ * 24 /* horas */;
    return (d1.getTime() / vDia) - (d1.getTime() / vDia);
}

Acho que é isso… Escrevi direto aqui.

renanreismartins

http://joda-time.sourceforge.net/

Natalia_Lima

Eu montei há um tempo essa função que era pra validar um prazo máximo…
Por exemplo, um prazo máximo de 30 dias entre um período inicial e final.
Adapta ao que vc precisa… a sua regra certinha, blz?

/**
	 * Nome: validarPeriodoLimitado
	 * 
	 * Verifica se periodo é maior que 0 e menor que quantidadeDias.
	 */
	public static boolean validarPeriodoLimitado(Date periodoInicial, Date periodoFinal, Integer quantidadeDias) {

		Calendar dataInicio = Calendar.getInstance();
		Calendar dataFim = Calendar.getInstance();

		dataInicio.setTime(periodoInicial);
		dataFim.setTime(periodoFinal);

		Long dataIniMili = dataInicio.getTimeInMillis();
		Long dataFimMili = dataFim.getTimeInMillis();

		Long diferencaDias = dataFimMili - dataIniMili;
		diferencaDias = diferencaDias / (HORAS * SEGUNDOS * MINUTOS * MILISSEGUNDOS);

		if ((diferencaDias >= Numeros.ZERO) && (diferencaDias <= quantidadeDias)) {
			return true;
		} else {
			return false;
		}
	}

Eu li muito que não é o correto fazer com contas, porém não conseguimos um outro tipo de validação.
Se alguém tiver isso feito de uma maneira melhor, por favor, postar aí…

Natalia_Lima

Ahhh, e as constantes dali eram

private static int HORAS = 24;

private static int SEGUNDOS = 60;

private static int MINUTOS = 60;

private static int MILISSEGUNDOS = 1000;
Criado 27 de janeiro de 2011
Ultima resposta 27 de jan. de 2011
Respostas 4
Participantes 4