Vejo e recebo sempre a pergunta: “Como faço para calcular a diferença entre duas datas em Java”. Então aqui vai alguns exemplos para calcular diferença entre duas datas em Segundos, Minutos, Horas, Dias, Meses e Anos.

try {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date dataDe = sdf.parse("2014-02-05");
    Date dataAte = sdf.parse("2015-04-05");

    long diferencaSegundos = (dataAte.getTime() - dataDe.getTime()) / (1000);
    long diferencaMinutos = (dataAte.getTime() - dataDe.getTime()) / (1000*60);
    long diferencaHoras = (dataAte.getTime() - dataDe.getTime()) / (1000*60*60);
    long diferencaDias = (dataAte.getTime() - dataDe.getTime()) / (1000*60*60*24);
    long diferencaMeses = (dataAte.getTime() - dataDe.getTime()) / (1000*60*60*24) / 30;
    long diferencaAnos = ((dataAte.getTime() - dataDe.getTime()) / (1000*60*60*24) / 30) / 12;

    System.out.println(String.format("Diferença em Segundos: ", diferencaSegundos));
    System.out.println(String.format("Diferença em Minutos: ", diferencaMinutos));
    System.out.println(String.format("Diferença em Horas: ", diferencaHoras));
    System.out.println(String.format("Diferença em Dias: ", diferencaDias));
    System.out.println(String.format("Diferença em Meses: ", diferencaMeses));
    System.out.println(String.format("Diferença em Anos: ", diferencaAnos));
} catch (ParseException e) {
    e.printStackTrace();
}

Vou explicar o cálculo da diferença em Dias, linha 9. Inicialmente nas linhas 3 e 4, criamos 2 datas para que o cálculo seja feito entre elas.
Para o cálculo da diferença em dias, primeiro é feito a subtração dos milissegundos entre as duas datas, com o resultado da diferença em milissegundos, transformamos os milissegundos em segundos, dividindo por 1000 (Um segundo tem 1000 milissegundos). Até este momento, temos a diferença em segundos, para chegarmos em minutos, a multiplicação é feita por 60 (Um minuto tem 60 segundos), novamente por 60 (Uma hora tem 60 minutos) temos a diferença em horas e por fim, novamente uma multiplicação, agora por 24 (Um dia tem 24 horas) e temos a diferença em dias.

Qualquer dúvida estou a disposição.

Por enquanto é isso, até o próximo post.

9 comentários para “Calcular diferença entre datas em Java

  1. Pingback: Calcular Período de tempo com Java 8 | Parmigiani Júnior, Ednei

  2. cristiane Araujo on 23 de abril de 2016 at 15:31 said:

    oi, muito boa explicacao.show d bola
    mas como que faz pra saber o inverso disso
    por exeplo, quantos dias fantam para o meu aniversario

    • Olá Cristiane, a operação é bem simples, basta fazer a data de seu próximo aniversário menos a data atual. Por exemplo:
      long diasParaAniversario = (dataProxmimoAniversario.getTime() – dataAtual.getTime()) / (1000*60*60*24);

      Antes do calculo você deve fazer algumas verificações pra ficar legal, tais como:
      – Se o seu aniversário no ano atual ja foi, logo o ano da data (dataProximoAniversario) deverá ser editada para que no valor Ano seja o próximo ano;

      E as mesmas verificações para o mês e dia de seu aniversário no ano corrente.

      Qualquer dúvida é so avisar.

  3. Boa tarde.

    Ótimo post! Gostaria de compartilhar uns testes que eu realizei:

    Coincidentemente ou não, houve um erro no cálculo para obter a diferença em anos (minha idade).

    dataDe = 1990-03-06
    dataAte = 2016-12-06 (dia que realizei os testes)

    O resultado foi 27, mas eu tenho 26 anos.

    Realizando alguns testes, eu percebi que para obter o resultado 26, a dataAte deve ser até “2016-10-14”.
    No dia seguinte, “2016-10-15”, o resultado é 27.

  4. Bruno Sousa on 20 de abril de 2017 at 18:39 said:

    Muito Obrigado cara!

  5. Bruno on 8 de maio de 2017 at 1:29 said:

    Muito obrigado pela dica… Ajudou demais!!!!

  6. Pedro Lumingos on 18 de maio de 2017 at 10:44 said:

    Ola Pessoal!!!

    Estou a desenvolver um sistema e estou com alguns problemas:
    O sistema é Gestão Hoteleiro.

    Então, me ajudem só a calcular:

    Tenho a “dataEntrada”
    e “dataSaida”

    quero fazer a diferença e me dar o numero de dias, em função deste dia eu pego e multiplico pelo valor do quarto que ele vai alugar…

Deixe um comentário

Campos obrigatórios são marcados *

Post Navigation