Olá, estou tendo problemas para implementar uma funcionalidade em um app, eu preciso dizer quantos dias faltam pra chegar determinada data porém… TA FODA! Na lógica de horas é simples, vc converte as horas e minutos em segundos, subtrai a hora alvo pela hora atual e shazam! ta ai o tempo que falta, é só converter em horas e minutos de novo. Com dias, meses e anos é mais complicado. Temos meses com 30,31 dias e anos bissextos que tornam fevereiro mais longo ou curto (sei lá). Oque influência no resultado final impedindo que eu use a lógica da hora. enfim, algum dos senhores conhece uma boa lógica pra mim saber por exemplo: hoje é dia 03/11/16 quantos dias faltam até o dia 03/01/17. Obg.
cara esse foi um dos meus primeiros programas em Pascal, bons tempos.
existem varias abordagens. a mais simples é
se o ano e o mes é o mesmo, então basta subtrair os dias.
se o ano é o mesmo, então vc precisa saber quantos dias se passaram desde primeiro de janeiro nas duas datas e ai subtrai.
pra isso vc precisa saber quantos dias tem um mes, aquele famoso array [ 31, 28, 31, … ] ( lembrando que o indice do array vai ser o mes-1 )
mas e se o ano for bissexto? ai vc soma um em fevereiro.
mas como saber se o ano é bissexto? se vira. tem um calculo pronto na internet com as condições ( de 4 em 4 mas pula de 100 e 100, algo assim )
e se os anos forem diferentes.
ai vc usa uma logica semelhante ao dos meses. escolhe uma data base ( primeiro de janeiro do ano menor ) e vai somando. e se for bissexto soma um. e vai.
da trabalho, muito trabalho. divida o trabalho e teste bem.
Boa tarde Gilian,
Essa API pode te ajudar: http://www.joda.org/joda-time/
Se você estiver utilizando Java 8 se não me engano ela já vem junto.
Apenas exemplo:
public static void main(String[] args) {
// Ex A
DateTime data1a = new DateTime(2016, 11, 3, 0, 0, 0, 0);
DateTime data2a = new DateTime(2017, 01, 3, 0, 0, 0, 0);
int quantidadeDiasa = Days.daysBetween(data1a, data2a).getDays();
System.out.println(quantidadeDiasa);
//Ex B
Calendar calendar1 = Calendar.getInstance();
calendar1.set(2016, Calendar.NOVEMBER, 03, 0, 0);
Calendar calendar2 = Calendar.getInstance();
calendar2.set(2017, Calendar.JANUARY, 03, 0, 0);
DateTime data1b = new DateTime(calendar1.getTime());
DateTime data2b = new DateTime(calendar2.getTime());
int quantidadeDiasb = Days.daysBetween(data1b, data2b).getDays();
System.out.println(quantidadeDiasb);
}
Espero que isso possa te ajudar.