Criar tantos objetos em relação a diferença entre datas [RESOLVIDO]

6 respostas
A

Olá pessoal,

estou com uma dúvida e não sei como fazer pra resolver :S

eu tenho duas datas - inicial e final

agora eu tenho que criar objetos com essas datas. Exemplo:

Data inicial - 10/04/2011 Data final - 10/05/2011
Agora crio um objeto com a primeira data, daih outro objeto a sequencia da data 11/04/2011, daih outro objeto com 12/04/2011… assim por diante até a data final(10/05/2011)

Ou seja eu tenho percorrer a data até a data final, criando um novo objeto a cada data e colocando a nova data no objeto, é claro.
Eu poderia transformar a data em string e ir adicionando mais um, e converter novamente pra data, o problema é se o mês tem 30 ou 31…não sei como saber isso

e talvez isso seria muita gambiarra haha

Se alguém souber como me ajudar?
Abrigado a a todos.

6 Respostas

dreampeppers99

Só uma curiosidade pra que isso? é um exercício, desafio de facul?

A

Não, na verdade é pra trabalho mesmo estou estagiando comecei a trabalhar com JSF e tenho uma página, onde o usuário coloca data final e inicial

e a partir desta data eu gero uma tabela, sendo como a coluna a seqüencia dos dias, iniciando pela data incial até a final hehe

xandevieira

Segue como eu fiz.

DateUtils.java
public static final long DAY = 24L * 60L * 60L * 1000L;
	public static final long HOUR = 60L * 60L * 1000L;
	public static final long MINUTES = 1000L * 60L;
	public static final long SECONDS = 1000L;
	public static final String TIMEZONE_BR = "America/Sao_Paulo";
	private static final Locale BR = new Locale("pt", "BR");
	/**
	 * Retorna o primeiro dia do mes a partir de uma data.
	 */
	public static Date getPrimeiroDiaDoAno(Date date) {
		GregorianCalendar gc = getDateCalendar(date);
		gc.set(Calendar.MONTH, 0);
		gc.set(Calendar.DAY_OF_MONTH, 1);
		return gc.getTime();
	}
	public static Date getDataAtual2() {
		/*
		 * Pega a diferença do fuso horário do cliente com relação ao fuso de
		 * Brasília Esse número está cadastrado no banco.
		 */
		Integer fuso = new Integer(0);

		// TimeZone.setDefault(TimeZone.getTimeZone("GMT-3:00"));
		GregorianCalendar gc = (GregorianCalendar) GregorianCalendar
				.getInstance();
		if (!new Integer(0).equals(fuso))
			gc
					.setTimeInMillis(gc.getTimeInMillis()
							- (fuso.longValue() * HOUR));
		return gc.getTime();
	}
	public static String convertBrDate(Date date) {
		return convertDate("dd/MM/yyyy", date);
	}
	public static String convertDate(String format, Date dtConsulta) {
		try {
			SimpleDateFormat formatter = new SimpleDateFormat(format,
					new Locale("pt", "BR"));
			return formatter.format(dtConsulta);
		} catch (Exception e) {
			return null;
		}
	}
	public static int getDifDay(Date date1, Date date2) {
		return (int) ((clearCamposNaoData(date2).getTime() - clearCamposNaoData(date1).getTime()) / DAY);
	}
	public static Date clearCamposNaoData(Date date) {
		GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance();
		gc.setTime(date);
		gc.set(GregorianCalendar.HOUR_OF_DAY, 0);
		gc.set(GregorianCalendar.MINUTE, 0);
		gc.set(GregorianCalendar.SECOND, 0);
		gc.set(GregorianCalendar.MILLISECOND, 0);
		return gc.getTime();
	}
	/**
	 * Retorna uma data com a soma dos dias passados como parametro.
	 * 
	 * @param days
	 *        Dias a serem somados com a data.
	 */
	public static Date sumDays(Date date, int days) {
		GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance();
		gc.setTime(date);
		gc.add(GregorianCalendar.DAY_OF_MONTH, days);
		return gc.getTime();
	}
Teste.java
public class Teste {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		List<Date> list = new ArrayList<Date>();
		Date dateInicial = DateUtils.getPrimeiroDiaDoAno(DateUtils.getDataAtual2());
		Date dateFinal = DateUtils.getDataAtual2();
		int dias = DateUtils.getDifDay(dateInicial, dateFinal);
		System.out.println("Data inicial: " + DateUtils.convertBrDate(dateInicial));
		System.out.println("Data final: " + DateUtils.convertBrDate(dateFinal));
		System.out.println("Diferença: " + dias);

		for (int i = 0; i < dias; i++) {
			Date date = DateUtils.sumDays(dateInicial, i);
			list.add(date);
		}
		System.out.println("Tamanho :" + list.size());
		for (Date date : list) {
			System.out.println("Data: " + DateUtils.convertBrDate(date));
		}
	}

}
saída
Data inicial: 01/01/2011 Data final: 28/04/2011 Diferença: 117 Tamanho :117 Data: 01/01/2011 Data: 02/01/2011 Data: 03/01/2011 Data: 04/01/2011 Data: 05/01/2011 Data: 06/01/2011 Data: 07/01/2011 Data: 08/01/2011 Data: 09/01/2011 Data: 10/01/2011 Data: 11/01/2011 Data: 12/01/2011 Data: 13/01/2011 Data: 14/01/2011 Data: 15/01/2011 Data: 16/01/2011 Data: 17/01/2011 Data: 18/01/2011 Data: 19/01/2011 Data: 20/01/2011 Data: 21/01/2011 Data: 22/01/2011 Data: 23/01/2011 Data: 24/01/2011 Data: 25/01/2011 Data: 26/01/2011 Data: 27/01/2011 Data: 28/01/2011 Data: 29/01/2011 Data: 30/01/2011 Data: 31/01/2011 Data: 01/02/2011 Data: 02/02/2011 Data: 03/02/2011 Data: 04/02/2011 Data: 05/02/2011 Data: 06/02/2011 Data: 07/02/2011 Data: 08/02/2011 Data: 09/02/2011 Data: 10/02/2011 Data: 11/02/2011 Data: 12/02/2011 Data: 13/02/2011 Data: 14/02/2011 Data: 15/02/2011 Data: 16/02/2011 Data: 17/02/2011 Data: 18/02/2011 Data: 19/02/2011 Data: 20/02/2011 Data: 21/02/2011 Data: 22/02/2011 Data: 23/02/2011 Data: 24/02/2011 Data: 25/02/2011 Data: 26/02/2011 Data: 27/02/2011 Data: 28/02/2011 Data: 01/03/2011 Data: 02/03/2011 Data: 03/03/2011 Data: 04/03/2011 Data: 05/03/2011 Data: 06/03/2011 Data: 07/03/2011 Data: 08/03/2011 Data: 09/03/2011 Data: 10/03/2011 Data: 11/03/2011 Data: 12/03/2011 Data: 13/03/2011 Data: 14/03/2011 Data: 15/03/2011 Data: 16/03/2011 Data: 17/03/2011 Data: 18/03/2011 Data: 19/03/2011 Data: 20/03/2011 Data: 21/03/2011 Data: 22/03/2011 Data: 23/03/2011 Data: 24/03/2011 Data: 25/03/2011 Data: 26/03/2011 Data: 27/03/2011 Data: 28/03/2011 Data: 29/03/2011 Data: 30/03/2011 Data: 31/03/2011 Data: 01/04/2011 Data: 02/04/2011 Data: 03/04/2011 Data: 04/04/2011 Data: 05/04/2011 Data: 06/04/2011 Data: 07/04/2011 Data: 08/04/2011 Data: 09/04/2011 Data: 10/04/2011 Data: 11/04/2011 Data: 12/04/2011 Data: 13/04/2011 Data: 14/04/2011 Data: 15/04/2011 Data: 16/04/2011 Data: 17/04/2011 Data: 18/04/2011 Data: 19/04/2011 Data: 20/04/2011 Data: 21/04/2011 Data: 22/04/2011 Data: 23/04/2011 Data: 24/04/2011 Data: 25/04/2011 Data: 26/04/2011 Data: 27/04/2011

Espero ter ajudado

A

Então, eu poderia fazer assim:

Calendar calendar = Calendar.getInstance();

calendar.setTime(date)

calendar.add(Calendar.DAY_OF_MONTH, +1);

isto faz com que ele adicione mais um no dia não é?

e agora como que faço para saber se o +1 não vai para 31…se o mês é até 30

A

Nossa avsouza não tinha visto sua resposta…tava colocando a minha talvez ideia haha

vou dar uma olhada no seu codigo

A

Olha consegui rodar e entender o código, deu bem certo para o que eu quero, vou utilizar algumas coisas rsrs

Vlw muito obrigado avsouza!

Criado 28 de abril de 2011
Ultima resposta 29 de abr. de 2011
Respostas 6
Participantes 3