2009-09-23 3 views

Répondre

3

La solution la plus simple (naïve) je peux voir est:

Obtenir un calendrier (Calendar.getInstance())

Réglez l'année, le mois, la date, etc. (zéro sur d'autres domaines).

ajoutant un itérer ensuite à la date (arrêt si vous n'êtes pas dans le bon mois - calendar.get (Calendar.MONTH))

tout en réitérant, si calendar.get (Calendar.DAY_OF_WEEK) == Calendar.TUESDAY incrémente alors le compteur du mardi.

+0

Eh bien, je ne voudrais pas incrémenter le compteur, mais l'ajouter à une liste ou quelque chose. J'ai codé votre algorithme et fonctionne bien. Merci – OscarRyz

+0

Vous aviez vraiment besoin de Stack Overflow pour trouver * cette * solution? Vous plaisantez, non? – Bombe

7

Consulter la Doomsday Rule - vous devriez être en mesure d'appliquer cet algorithme à votre problème.

+0

excellentes ... de nombreuses années Je suis tombé sur cet algorithme mais je ne savais pas comment il s'appelait, donc je n'ai pas pu le retrouver. –

+0

Si ce calcul doit être fait beaucoup, alors l'algorithme de Doomsday sera probablement beaucoup plus rapide. – jnylen

0

Comme par réponse daveb J'ai:

import java.util.Calendar; 
import static java.util.Calendar.*; 

public class DiasDelMes { 

    public static void main(String [] args) { 

     Calendar calendar = getInstance(); 

     calendar.set(DAY_OF_MONTH, 1 ); 

     int month = calendar.get(MONTH); 

     while(calendar.get(MONTH) == month) { 

      if(calendar.get(DAY_OF_WEEK) == TUESDAY) { 
       System.out.println(calendar.get(DAY_OF_MONTH)) ; 
      } 

      calendar.add(DAY_OF_MONTH , 1); 
     } 
    } 
} 
0

Je cherchais la réponse à cette question, mais de le résoudre en Java 8.

Voici ma solution:

public Stream<Temporal> listAllDaysInMonthIterative(Month month, DayOfWeek dow) { 
    List<Temporal> dates = new ArrayList<>(); 
    LocalDate date = LocalDate.of(Year.now().getValue(), month.getValue(), 1); 

    TemporalAdjuster adjuster = TemporalAdjusters.nextOrSame(dow); 

    while (date.with(adjuster).get(ChronoField.MONTH_OF_YEAR) == month.getValue()) { 
     date = date.with(adjuster); 
     dates.add(date); 
     adjuster = TemporalAdjusters.next(dow); 
    } 

    return dates.stream(); 
} 

Run:

@Test 
public void testMondaysInMonth() { 

    MonthLengthReporter reporter = new MonthLengthReporter(); 
    Stream days = reporter.listAllDaysInMonthIterative(Month.MARCH, DayOfWeek.MONDAY); 

    days.forEach(System.out::println); 

} 
Questions connexes