Par exemple en septembre je aurais besoin:Comment puis-je connaître tous les mardis d'un mois donné?
1,8,15,22 et 29
Merci
Par exemple en septembre je aurais besoin:Comment puis-je connaître tous les mardis d'un mois donné?
1,8,15,22 et 29
Merci
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.
Consulter la Doomsday Rule - vous devriez être en mesure d'appliquer cet algorithme à votre problème.
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. –
Si ce calcul doit être fait beaucoup, alors l'algorithme de Doomsday sera probablement beaucoup plus rapide. – jnylen
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);
}
}
}
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);
}
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
Vous aviez vraiment besoin de Stack Overflow pour trouver * cette * solution? Vous plaisantez, non? – Bombe