Diferença entre datas (boleto febraban)

3 respostas
felipesp

Estou montando a linha do código de barras do boleto segundo as normas da FEBRABAN.

Um dos trechos é o campo fator de vencimento que possui 4 posições e é o número de dias entre 07/nov/1997 e a data de vencimento.

Estou tentando fazer a conta assim:

Calendar cal = new GregorianCalendar(2025, Calendar.DECEMBER, 21);

Calendar base = new GregorianCalendar(1997, Calendar.NOVEMBER, 07);

long diff = cal.getTimeInMillis() - base.getTimeInMillis();

System.out.println("^"+(diff/1000/60/60/24));

Segundo o manual da FEBRABAN, deveria resultar em 9999, mas eu recebo 10271. Quando as datas são mais próximas a diferença de dias cai proporcionalmente, o que me faz crer que o bug deve serelacionar a ano bissexto.

Alguém sabe como eu deveria fazer paracalcular isso?

3 Respostas

Dieval_Guizelini

Você tem certeza que a data base da FEBRABAN não é 07/10/1997 ou seja outubro e não novembro?

Vou fazer uns testes e posto aqui depois…

Dieval_Guizelini

No manual da Caixa eu tenho que as datas são:

base = 07/10/1997
e máximo: 21/02/2025

Código de teste:

Calendar base = new GregorianCalendar(1997, Calendar.OCTOBER, 07); Calendar p; long dif; long ant = 0L; for(int i=1998; i<=2025; i++ ) { p = new GregorianCalendar(i, Calendar.FEBRUARY, 21 ) ; dif = p.getTimeInMillis() - base.getTimeInMillis(); System.out.println( ""+(dif/86400000) + " dif ano anterior: " + ((dif-ant)/86400000) ); ant = dif; }

Resultado:

137 dif ano anterior: 364
502 dif ano anterior: 365
867 dif ano anterior: 364
1233 dif ano anterior: 366
1598 dif ano anterior: 365
1963 dif ano anterior: 365
2328 dif ano anterior: 365
2694 dif ano anterior: 366
3059 dif ano anterior: 365
3424 dif ano anterior: 365
3789 dif ano anterior: 365
4155 dif ano anterior: 366
4520 dif ano anterior: 365
4885 dif ano anterior: 365
5250 dif ano anterior: 365
5616 dif ano anterior: 366
5981 dif ano anterior: 365
6346 dif ano anterior: 365
6711 dif ano anterior: 365
7077 dif ano anterior: 366
7442 dif ano anterior: 365
7807 dif ano anterior: 365
8172 dif ano anterior: 365
8538 dif ano anterior: 366
8903 dif ano anterior: 365
9268 dif ano anterior: 365
9633 dif ano anterior: 365
9999 dif ano anterior: 366

Talvez seja este o seu problema…

fw.

felipesp

Dieval,

Obrigado pelo post. Consegui calcular direitinho. O meu problema era o seguinte: no manual vem 5 datas para testarmos o código. Pois é, no meu manual a última data estava errada! Eu fiz uma busca no google e encontrei um manual com a data que você passou (21.02.2025 para 9999 dias).

Bem, ainda bem que era só isso. Mas até eu descobrir perdi algumas horas.

Muito obrigado.

Criado 28 de setembro de 2006
Ultima resposta 29 de set. de 2006
Respostas 3
Participantes 2