Fazendo um For com Date

8 respostas
juliocesarsrosa

Ola pessoal, estou com o seguinte problema, preciso fazer um for, utilizando parametros Date, porem nao sei como, serial algo assim:

for( Date i=datainicial; i< dataFinal; i++){
   .....
}

Como posso fazer isso ?? creio que o argumento “++” nao pode ser utilizado como incremento para datas certo??

Vlw

8 Respostas

Danilo_Carvalho

Boa tarde!

Use um while.

Calendar dateInitial = Calendar.getInstance();
Calendar dateFinish = Calendar.getInsance();

while(dateInitial.getTime().before(dateFinish.getTime())) {

      //TODO:CODE

    dateFinish.add(Calendar.DAY_OF_MONTH, 1);
}

Alguma coisa desse tipo.

Qualquer coisa posta ai!

Até mais…

E

De fato, você não pode usar Date e sim Calendar, e você não pode usar ++.
Queria saber se a sua idéia é incrementar um dia de cada vez. Se for isso, um exemplo:

Calendar cal = Calendar.getInstance();
cal.setTime (dataInicial);
Calendar calFinal = Calendar.getInstance();
calFinal.setTime (dataFinal);
while (cal.before (calFinal)) {
    Date date = cal.getTime();
    // fazer as coisas que precisam desse date. 
   ...
    // passar para o próximo dia
    cal.add (Calendar.DATE, 1);
}
juliocesarsrosa

Na verdade, esqueci de especificar algo bem importante… o meu for incrementa de hora em hora, no caso estou trabalhando espcificamente com horas de um dia, e nao com dias…

como ficaria?

E

Bom, em vez de usar cal.add (Calendar.DATE, 1), use cal.add (Calendar.HOUR_OF_DAY, 1)

drsmachado

Na verdade, até da para fazer com Date e somar (não incrementar 1).
Lembre-se que o java considera a instância de java.util.Date como sendo o tempo, em milissegundos, decorridos de 01/01/1970 00:00:00 até o momento em que a instância foi criada e/ou de acordo com os parâmetros passados ao construtor.
Assim sendo, é possível converter em um long (o método getTime, da classe java.util.Date retorna um valor long) e realizar o incremento de horas, considerando que:
1 s = 1000 ms
1 m = 60 s
1 h = 60 m
1000 * 60 * 60 = 360000 ms

Claro, este é o método hardcore…

E

Amigos, há crianças na sala…

De qualquer forma, usar Calendar.add deve levar em conta aqueles probleminhas chatos de horário de verão…

juliocesarsrosa

bom tentei mais ainda sim há um problema…

Segue o meu codigo

SimpleDateFormat formatador = new SimpleDateFormat("HH:mm:ss");
jobGroup.setStartTime(formatador.parse("23:09:00"));
jobGroup.setEndTime(formatador.parse("23:05:00"));
startCronCalendar.setTime(jobGroup.getStartTime());
endCronCalendar.setTime(jobGroup.getEndTime());


//esse fluxo precisa fazer com que o start time cruze o limite diario e chegue até o endTime
//Ex: 23,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23

while(startCronCalendar.after(endCronCalendar)) {
//Faca o que eu preciso

startCronCalendar.add(Calendar.HOUR_OF_DAY,1);

}

Esta em looping infinito, alguem consegue me ajudar?

drsmachado

juliocesarsrosa:
bom tentei mais ainda sim há um problema…

Segue o meu codigo

SimpleDateFormat formatador = new SimpleDateFormat("HH:mm:ss");
jobGroup.setStartTime(formatador.parse("23:09:00"));
jobGroup.setEndTime(formatador.parse("23:05:00"));
startCronCalendar.setTime(jobGroup.getStartTime());
endCronCalendar.setTime(jobGroup.getEndTime());


//esse fluxo precisa fazer com que o start time cruze o limite diario e chegue até o endTime
//Ex: 23,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23

while(startCronCalendar.after(endCronCalendar)) {
//Faca o que eu preciso

startCronCalendar.add(Calendar.HOUR_OF_DAY,1);

}

Esta em looping infinito, alguem consegue me ajudar?

</blockquote>

What do you mean with startCronCalendar.[b]after<a>/b</a>?

<a href="http://translate.google.com/#en/pt/after" data-bbcode="true">After</a>

<a href="http://translate.google.com/#en/pt/before" data-bbcode="true">Before</a>

E aqui, alguns detalhes sobre os métodos de incremento de tempo da classe Calendar

<a href="http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html#add(int,%20int)" data-bbcode="true">add()</a>

<a href="http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html#set(int,%20int)" data-bbcode="true">set()</a>

<a href="http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html#roll(int,%20int)" data-bbcode="true">roll()</a>
Criado 17 de junho de 2013
Ultima resposta 18 de jun. de 2013
Respostas 8
Participantes 4