Subtração de data?

Boa tarde!!

Gostaria de saber como fazer subtração de data no java, tentei achar alguma função no Calendar, mas não tive sucesso!

grato!

[code]Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime()); // data de hoje

calendar.add(Calendar.DAY_OF_WEEK, -1); // tirando 1 dia
System.out.println(calendar.getTime()); // data de ontem[/code]

Você também pode dar uma olhadinha no framework “[google]JODA-TIME[/google]” mas ou usa um ou usa outro, se misturar vira porcaria. Joda time tbm é um bom exemplo para estudar sobre [google]fluent interfaces[/google]. Bem interessante ! :slight_smile:

Como assim subtração de datas?
Ter uma data inicial, uma final e retorna a diferença (em dias) entre elas?

[quote=vtr.oliveira]Como assim subtração de datas?
Ter uma data inicial, uma final e retorna a diferença (em dias) entre elas?[/quote]

Isso seria obter o periodo entre duas datas.

Subtração de datas é ter uma data menos outra data. A diferença pode ser em diminuir um ano, mes, dia, uma hora, um minuto, etc.

pega as duas datas…

dia ano e mês e transforma em dias… e subtrai…vai te retornar o numero de dias entre elas…

Talvez isso te ajude a ter uma luz…

public static Date getDiferencaData(Date dtInicial, Date dtFinal) {
        //Convertendo as datas para milisegundos
        long milisecondBegin = dtInicial.getTime();
        long milisecondEnd = dtFinal.getTime();

        //Subtraindo os milisegundos, para obter a diferença
        long milisecondResult = milisecondBegin - milisecondEnd;
        
        return new Date(milisecondResult);
    }

Pessoal, muito obrigado pelas respostas. Realmente eu poderia transformar a hora em minutos e os segundos em minutos e calcular, mas eu queria ver primeiro se não tem nenhum método que faria isso retornando a subtração!

O que o victor falou pode funcionar, vou testar e falo se deu certo:

[quote]view plaincopy to clipboardprint?
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime()); // data de hoje

calendar.add(Calendar.DAY_OF_WEEK, -1); // tirando 1 dia
System.out.println(calendar.getTime()); // data de ontem [/quote]

valeu!

O melhor jeito mesmo, é passar o tempo para uma base só, como o segundos e depois subtrair, eu estava querendo fazer a subtração para fazer a relação do tamanho de um pacote e o tempo que ele levava para percorrer um caminho.

valeu pela ajuda galera!

Olá ThiagoWorldCoder ,

Cara, vou quebrar seu galho, ralei muito uma época para fazer este calculo, foram vários dias de pesquisa, até que fui pegando a lógica de como funciona e montei um método, segue abaixo o método …

primeiro tem que importar uns pacotes,

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Date;

public static int calcula2(String dia1, String dia2){

         DateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
         Date data3= null;
         Date data4 = null;
         long m1 = 0;
         long m2 = 0;
         try{
               data3 = (Date) fmt.parse(dia1);
               data4 = (Date) fmt.parse(dia2);
              }
         catch(Exception e){}
         Calendar data1 = new GregorianCalendar();
         data1.setTime(data3);
         Calendar data2 = new GregorianCalendar();
         data2.setTime(data4);
         m1 = data1.getTimeInMillis();
         m2 = data2.getTimeInMillis();
         return (int) ((m2 - m1) / (24*60*60*1000));
          }

Espero ter ajudado, observe os parametros do método …

Generosamente,

Frid

Olá!

Aproveitando a discussão, gostaria de saber se já existe um método implementado que retorne o número de meses entre
duas datas.

Abraço!

Olá mais uma vez!!!

Por não encontrar um método próprio da API fiz a implementação na mão

GregorianCalendar dataInicio = proposta.getDataInicioProjeto();
GregorianCalendar dataTermino = proposta.getDataFimProjeto();
		
long inicio = dataInicio.getTimeInMillis();
long fim = dataTermino.getTimeInMillis();
long intervalo = fim - inicio;
int duracaoProjeto = (int)(intervalo / (1000 * 60 * 60 * 24 * 30)); // resultado em meses

Colocando as datas de inicio como 30/10/2008 e fim como 30/11/2008 obtive a resposta -1.
Alguém pode dizer qual foi o erro cometido?

Abraço!

Kara, fiz uma gambis aqui, mas tá funcionando tranquilão…

[code]public class Main {

public static void main(String[] args) {
	new Main();
}

Main() {
	Calendar dataInicial = Calendar.getInstance();
	Calendar dataFinal   = Calendar.getInstance();
	
	dataFinal.add(Calendar.YEAR, 2);
	dataFinal.add(Calendar.MONTH, 3);
	
	
	int quantidadeDeMeses = 0;
	
	if (dataInicial.get(Calendar.YEAR) < dataFinal.get(Calendar.YEAR)) {
		quantidadeDeMeses = 12 * (dataFinal.get(Calendar.YEAR) - dataInicial.get(Calendar.YEAR));
		
		if (dataInicial.get(Calendar.MONTH) > dataFinal.get(Calendar.MONTH)) {
			quantidadeDeMeses += (dataInicial.get(Calendar.MONTH) - dataFinal.get(Calendar.MONTH));
		}
		
	}
	
	if (dataInicial.get(Calendar.MONTH) < dataFinal.get(Calendar.MONTH)) {
		quantidadeDeMeses += (dataFinal.get(Calendar.MONTH) - dataInicial.get(Calendar.MONTH));
	}
	
	System.out.println(quantidadeDeMeses);
	
}

}[/code]

huahuahuahu

Se servir… rsrsrs

Falows