2010-01-15 4 views
7

J'ai la date de début et la date de fin. Je dois parcourir tous les jours entre ces deux dates.J'ai besoin d'un cycle qui parcourt les intervalles de dates

Quelle est la meilleure façon de faire cela?

que je peux suggérer que quelque chose comme:

Date currentDate = new Date (startDate.getTime()); 
while (true) { 
    if (currentDate.getTime() >= endDate.getTime()) 
     break; 
    doSmth(); 
    currentDate = new Date (currentDate.getTime() + MILLIS_PER_DAY); 
} 

Répondre

13

prêt à fonctionner ;-)

public static void main(String[] args) throws ParseException { 
    GregorianCalendar gcal = new GregorianCalendar(); 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd"); 
    Date start = sdf.parse("2010.01.01"); 
    Date end = sdf.parse("2010.01.14"); 
    gcal.setTime(start); 
    while (gcal.getTime().before(end)) { 
     gcal.add(Calendar.DAY_OF_YEAR, 1); 
     System.out.println(gcal.getTime().toString()); 
    } 
} 
+0

Votre réponse m'a sauvé la vie !!! – NinjaBoy

3

Utilisez un objet Calendar si vous souhaitez manipuler les dates.

Calendar c = Calendar.getInstance(); 
    // ... set the calendar time ... 
    Date endDate = new Date(); 
    // ... set the endDate value ... 

    while (c.getTime().before(endDate) { 
     // do something 
     c.add(Calendar.DAY_OF_WEEK, 1); 
    } 

Ou utiliser Joda Time

6

Ditto sur ceux qui disent utiliser un objet Calendrier.

Vous pouvez avoir des problèmes surprenants si vous essayez d'utiliser un objet Date et y ajoutez 24 heures.

Voici une énigme pour vous: Quel est le mois le plus long de l'année? Vous pourriez penser qu'il n'y a pas de réponse à cette question. Sept mois ont 31 jours chacun, donc ils sont tous de la même longueur, non? Eh bien, aux États-Unis, ce serait presque juste, mais en Europe ce serait faux! En Europe, octobre est le mois le plus long. Il a 31 jours et 1 heure, car les Européens remettent leurs horloges 1 heure pour l'heure d'été en octobre, faisant un jour en octobre dernier 25 heures. (Les Américains commencent maintenant la DST en novembre, qui a 30 jours, donc Novembre est encore plus courte qu'Octobre ou Décembre.)

J'ai déjà rencontré des problèmes en faisant exactement ce que vous êtes essayer de faire: J'ai utilisé un objet Date et ajouté 24 heures dans une boucle. Cela a marché tant que je n'ai pas franchi les limites de l'heure d'été. Mais quand je l'ai fait, soudainement j'ai sauté une journée ou frappé deux fois le même jour, parce que minuit 8 mars 2009 + 24 heures = 1h00 du matin le 10 mars. Comme d'habitude, le 9 mars a été mystérieusement sauté . De même, à minuit le 1er novembre 2009 + 24 heures = 23h00 le 1er novembre, et nous avons frappé le 1er novembre deux fois.

+0

merci pour votre ajout – Roman

+0

Intéressant, mais les gens votent plus pour le code «prêt à courir» :) –

+0

Stacker avait déjà donné le code. J'essayais juste d'expliquer POURQUOI c'était la bonne réponse et l'idée OP ne fonctionnerait pas. Bien sûr, un exemple de code de travail est une bonne chose, mais à moins que vous compreniez pourquoi cela fonctionne, cela ne fait que vous aider à surmonter le problème immédiat. La prochaine fois qu'un problème similaire mais pas tout à fait identique se présentera, vous serez à nouveau coincé. :-) – Jay

Questions connexes