Olá! Abaixo um exemplo de como fazer cálculo de subtração entre datas com Java. Há um tempo atrás eu postei como fazer o cálculo de tempo com Oracle PL/SQL.
package br.com.furutani;
import java.util.Calendar;
/**
 * Calcula a diferença em dias entre a data de hoje e o dia 10/FEV/2008
 * @author Roberto Jundi
 */
public class Calendario {
	public static void main(String[] args) {
		// Data inicial
		Calendar dataInicio = Calendar.getInstance();
		// Atribui a data de 10/FEV/2008
		dataInicio.set(2008, Calendar.FEBRUARY, 10);
		// Data de hoje
		Calendar dataFinal = Calendar.getInstance();
		// Calcula a diferença entre hoje e da data de inicio
		long diferenca = dataFinal.getTimeInMillis() -
						 dataInicio.getTimeInMillis();
		// Quantidade de milissegundos em um dia
		int tempoDia = 1000 * 60 * 60 * 24;
		long diasDiferenca = diferenca / tempoDia;
		System.out.println("Entre a data inicial e final são " +
							diasDiferenca + " dias de diferença.");
	}
}
Até mais, Roberto
Share


12 comentários

  1. #
    Fernando
    abril 24th, 2009 at 19:46

    Muito muito Obrigado
    Não tem idéia de como quebrei a cabeça por isso

    Responda a esse comentário
  2. #
    Monique
    janeiro 19th, 2010 at 9:47

    Bom dia Furutani!
    To com uma dúvida aqui, to precisando calcular a diferença entre horas.Eu estava fazendo assim:
    Minha data está neste formato: 2009-11-28 22:00:00
    Integer diferencaHorasUteis = requisicao.getDataHoraRetornoEfetivo().getHours() – requisicao.getDataHoraSaidaEfetiva().getHours();

    Mas além de estar depreciado, ele nao calcula correto,apenas se for horas redondas.Ex: 23 – 22 = 1h
    Mas se for EX: 23:30 – 22 ele me calcula errado.
    Pesquisei algumas coisas na net,testei mas nao deu mt certo.

    Responda a esse comentário
  3. #
    Larissa
    fevereiro 12th, 2010 at 16:46

    O método getTimeMillis() calcula anos bissextos também?? Pois o getTime() não calcula, e não tenho idéia de como fazer isso…será que você pode me ajudar?

    Responda a esse comentário
  4. #
    Bruno
    janeiro 9th, 2011 at 23:17

    Roberto,
    Você me ajudou muuuito.Achei varios codigos por ai, mas nenhum me deu a quantidade de dias certos.

    Obrigado!

    Responda a esse comentário
  5. #
    Rodrigo
    novembro 7th, 2012 at 15:41

    to com uma dúvida: quero pegar o valor do campo controlDate (classe swing) e subtrair com o valor do outro campo controlDate, lembrando q o valor q o campo retorna é Date. ;s

    Responda a esse comentário
    • #
      Roberto Furutani
      novembro 7th, 2012 at 15:47

      Se essa classe ControlDate retornar um objeto java.util.Date é possível “transformá-la” em Calendar usando o método Calendar.setTime(Date).
      Feito isso você pode usar o exemplo do post.

      Responda a esse comentário
  6. #
    Gilberto
    setembro 13th, 2013 at 18:44

    ola. gostaria de subtrair duas datas informadas pelo usuário. estou no inicio e não tenho ideia.

    Responda a esse comentário
  7. #
    Iuri Vidal
    setembro 28th, 2013 at 21:10

    Cara, você salvou meu trabalho da facul valeu mesmo.

    Responda a esse comentário
  8. #
    Cristiano
    outubro 10th, 2013 at 14:57

    Otimo comentario amigo, seguinte preciso que haja um calculo assim, dia x mes x ano (2 ultimos digitos ) x 3 . sera q tem como???

    Responda a esse comentário
  9. #
    Fernando Fraga
    setembro 8th, 2015 at 11:47

Deixe um comentário