Subtração de datas

1 resposta
T

Olá caros amigos, em meus estudos me deparei com um exercicio em que tenho que pegar a data atual e subtrair de uma data dada pelo usuario
e o programa tem que devolver o resultado da subtração entre a data atual e a data que o usuario digitou. Por exemplo a data de hoje é 02/05/2012,
se o usuario digitasse 05/05/2012 o resultado deveria ser 3 dias.

Infelizmente o programa não funciona corretamente (na verdade estou nesse programa faz um mês):

import java.util.Calendar;
import java.util.Scanner;

/*
 *  Elabore um programa em Java que mostre ao usuário a quantidade de 
 *  dias que faltam para uma data a ser inserida pelo usuario e a data atual
 * 
 * 
 */
public class ContagemRegressiva {
	
	
	private String data, dia, mes, ano;
	
	
	//exibindo a data
	public String getData(){
		
			return data;
		
	}
	//setando a data
	public String setData(){
		
			Scanner ler = new Scanner(System.in);
			
			
			System.out.println("Digite a data desejada no formato dd/mm/aaaa");
			System.out.println("-------------------------------------------->");
			this.data = ler.nextLine();
			
			return data;
	}	
	
	
	
	//construtor sem parametros
	public ContagemRegressiva(){
		
		data = dia = mes = ano = "";
		
	}
	
	//exibe a data atual
	public void DataAtual(){
		
			Calendar data = Calendar.getInstance();
			System.out.println(data.getTime());
			
	}
	
	
	//exibe quantos dias faltam para o ano que o usuario escolher
	public void ContarData(){
		
		
			this.data = setData();
			
			String[] d = data.split("/"); 
			
						//fragmentando a data
						for(int i = 0; i < d.length; i++){
							
							dia = d[0];
							mes = d[1];
							ano = d[2];
							
						}
			
												
			//System.out.println(data);
			Calendar data1 = Calendar.getInstance();
			Calendar data2 = Calendar.getInstance();
			
			data1.get(Calendar.DAY_OF_MONTH);
			data1.get(Calendar.MONTH);
			data1.get(Calendar.YEAR);
			
			
			data2.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dia));
			data2.set(Calendar.MONTH, Integer.parseInt(mes));
			data2.set(Calendar.YEAR, Integer.parseInt(ano));
			
			long d1 = data1.getTimeInMillis();
			long d2 = data2.getTimeInMillis();
			System.out.println("N° dias: " + (int)((d2 - d1)/ (24*60*60*1000)));
		
		
	}
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
			ContagemRegressiva DA = new ContagemRegressiva();
			
			DA.DataAtual();
			
			DA.ContarData();
		
		
		

	}

}

1 Resposta

lele_vader

Não seria melhor você usar a api joda time.

Eu nunca usei mas sei que ela pode comparar datas e dar a diferença;

Olha só como seria com ela.

LocalTime start = new LocalTime(10:00:00);

LocalTime end   = new LocalTime(11:30:00);

Period period   = new Period(start, end);

System.out.printf(“Diferença: %02d:%02d”, period.getHours(), period.getMinutes());
System.out.println();

Nesse post aqui falam dela.

Abraços;

Criado 2 de maio de 2012
Ultima resposta 2 de mai. de 2012
Respostas 1
Participantes 2