Calculo com datas

Pessoal, estou desenvolvendo um sistema para fazer a leitura
de códigode barras no padrão 2de5 e preciso fazer um calculo
que é

Cálculo do Fator de Vencimento:
Para obter o fator de vencimento podem ser utilizadas duas fórmulas:
1ª) Data Base de 07.10.1997, calculando o número de dias entre essa data e a do vencimento (data de vencimento menos data base = fator)
VENCIMENTO
03.07.2000
DATA BASE

  • 07.10.1997
    FATOR DE VENCIMENTO
    1000

será que alguem tem alguma idea pra me ajuda?
estou tentando fazer usando a classe Calendar mas esta complicado
qualquer ajuda é bem vinda

obrigado!!!

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

A classe Calendar, conforme você já deve ter visto, não é adequada para subtrair duas datas.

A classe Date fornece o método getTime() que retorna os milisegundos desde 01/Jan/1970 00:00:00 até a data.
Então, calculando a diferença entre os milisegundos das duas datas você consegue achar facilmente qualquer diferença entre elas:

import java.util.Date;
import java.text.SimpleDateFormat;

public class TesteDatas {
  public static void main(String args[]) {
      SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
      Date dataBase = null;
      Date vencimento = null;
      try {
         dataBase = sdf.parse("07/10/1997");
         vencimento = sdf.parse("03/07/2000");
      } catch (java.text.ParseException e) { return; }

      long diferencaMS = vencimento.getTime() - dataBase.getTime();
      long diferencaSegundos = diferencaMS / 1000;
      long diferencaMinutos = diferencaSegundos / 60;
      long diferencaHoras = diferencaMinutos / 60;
      long diferencaDias = diferencaHoras / 24;

      System.out.println(diferencaMS);
      System.out.println(diferencaSegundos);
      System.out.println(diferencaMinutos);
      System.out.println(diferencaHoras);
      System.out.println(diferencaDias);
   
  }
}

valeu galera já consegui

abraços!

bacana neste programa é colocar nosso aniversário e ver quantos dias, horas, minutos ja vivemos… gera um bom aplicativo.

1156636800000
1156636800
19277280
321288
13387

16-11-73
do meu aniversário até 12-7-2010

dias, horas, minutos, segundos e milisegundos respectivamente…

(aproveitando o post)

Galera,

Estou com um pequeno problema com o fator de vencimento por causa do ano bissexto.
Se fizermos:

[code]String[] data = “17/11/2010”.split("/");
String dia = data[0];
String mes = data[1];
String ano = data[2];

Calendar dataBase = GregorianCalendar.getInstance(new Locale(“pt”,“BR”));
dataBase.set(1997, 10, 7); // 07 de Outubro de 1997

Calendar vencimento = GregorianCalendar.getInstance();
vencimento.set(Integer.parseInt(ano), Integer.parseInt(mes), Integer.parseInt(dia));// = new GregorianCalendar(Integer.parseInt(ano), Integer.parseInt(mes)-1, Integer.parseInt(dia));

long diferenca = vencimento.getTimeInMillis() - dataBase.getTimeInMillis();
long diferencaDias = diferenca/(246060*1000);

System.out.println(“Gregorian:\t”+ diferencaDias);[/code]

Teremos como resposta 4788, quando deveria ser 4789 por causa do ano bissexto.

Como posso acertar isso? O GregorianCalendar tem o metodo isLeapYear, mas não faz diferença ao subtrair os dias? Ou eu que esqueci de informar algum parãmetro?

Vlw


Opa… resolvido…
Eu devo usar o GregorianCalendar ao invés do Calendar… ficando assim

[code]GregorianCalendar dataBase2 = new GregorianCalendar(1997, Calendar.OCTOBER, 7);
GregorianCalendar vencimento2 = new GregorianCalendar(Integer.parseInt(ano), Calendar.NOVEMBER, Integer.parseInt(dia));

long diferenca = vencimento2.getTimeInMillis() - dataBase2.getTimeInMillis();
long diferencaDias = diferenca/(246060*1000);

System.out.println(“GregorianCalendar:\t\t”+ diferencaDias);[/code]

Esse post me ajudou: http://www.guj.com.br/posts/list/42462.java

Obs.: Só um detalhe… tome cuidado com o campo do mês, onde vai de 0 (Janeiro) até 11(Dezembro).

Olá TiagoW, Tenho uma pergunta. Como posso pegar todos esses resultados e jogar dentro de uma variavel?

Preciso fazer isso e comparar com outro valor. Sei que é posivel, mas não sei com fazer. Poderia me ajudar?

java.util.Date dataNotificacao = new java.util.Date(format.parse(resultNotificacao).getTime());
java.util.Date dataCriacao = new java.util.Date(format.parse(resultCriacao).getTime());

			long diferencas = (dataNotificacao.getTime() - dataCriacao.getTime());
		    long diferencaSegundos = diferencas / 1000;  
	        long diferencaMinutos = diferencaSegundos / 60;  
	        long diferencaHoras = diferencaMinutos / 60;  
	        long diferencaDias = diferencaHoras / 24; 

Fiz até aqui. Queria fazer uma comparação, por exemplo

if(total > tantaHoras){
alguma coisa
}