Je dois trouver toutes les dates de week-end pour un mois donné et une année donnée. Exemple: Pour 01 (mois), 2010 (année), la sortie devrait être: 2,3,9,10,16,17,23,24,30,31, toutes les dates de fin de semaine.En Java, obtenir toutes les dates de week-end dans un mois donné
Répondre
Voici une version approximative des commentaires décrivant les étapes:
// create a Calendar for the 1st of the required month
int year = 2010;
int month = Calendar.JANUARY;
Calendar cal = new GregorianCalendar(year, month, 1);
do {
// get the day of the week for the current day
int day = cal.get(Calendar.DAY_OF_WEEK);
// check if it is a Saturday or Sunday
if (day == Calendar.SATURDAY || day == Calendar.SUNDAY) {
// print the day - but you could add them to a list or whatever
System.out.println(cal.get(Calendar.DAY_OF_MONTH));
}
// advance to the next day
cal.add(Calendar.DAY_OF_YEAR, 1);
} while (cal.get(Calendar.MONTH) == month);
// stop when we reach the start of the next month
java.time
Vous pouvez utiliser le Java 8 stream et le java.time package. Ici, un IntStream
de 1
au nombre de jours dans le mois donné est généré. Ce flux est mappé à un flux de LocalDate
dans le mois donné puis filtré pour rester le samedi et le dimanche. Nous trouvons le même résultat que la première réponse (2 3 9 10 16 17 23 24 30 31)
import java.time.DayOfWeek;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.time.YearMonth;
import java.util.stream.IntStream;
class Stackoverflow{
public static void main(String args[]){
int year = 2010;
Month month = Month.JANUARY;
IntStream.rangeClosed(1,YearMonth.of(year, month).lengthOfMonth())
.mapToObj(day -> LocalDate.of(year, month, day))
.filter(date -> date.getDayOfWeek() == DayOfWeek.SATURDAY ||
date.getDayOfWeek() == DayOfWeek.SUNDAY)
.forEach(date -> System.out.print(date.getDayOfMonth() + " "));
}
}
Vous pouvez essayer comme ceci:
int year=2016;
int month=10;
calendar.set(year, 10- 1, 1);
int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
ArrayList<Date> sundays = new ArrayList<Date>();>
for (int d = 1; d <= daysInMonth; d++) {
calendar.set(Calendar.DAY_OF_MONTH, d);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek==Calendar.SUNDAY) {
calendar.add(Calendar.DATE, d);
sundays.add(calendar.getTime());
}
}
FYI, ces vieilles classes de date-heure notoirement gênantes et confuses sont maintenant héritées, supplantées par les classes de java.time. Evite les vieilles classes. –
Toujours pertinent pour les développeurs Android. –
Le Answer by Lokni semble correct, avec des points de bonus pour l'utilisation des flux.
EnumSet
Ma suggestion d'amélioration: EnumSet
. Cette classe est une implémentation extrêmement efficace de Set
. Représentés en interne sous forme de vecteurs binaires, ils sont rapides à exécuter et prennent très peu de mémoire. L'utilisation d'un EnumSet
vous permet de définir la fin de semaine en passant un Set<DayOfWeek>
à l'aide d'un EnumSet
.
Set<DayOfWeek> dows = EnumSet.of(DayOfWeek.SATURDAY , DayOfWeek.SUNDAY);
Démonstration utilisant la syntaxe à l'ancienne sans Streams. Vous pouvez adapter Lokni’s answer’s code pour utiliser un EnumSet
d'une manière similaire.
YearMonth ym = YearMonth.of(2016 , Month.JANUARY) ;
int initialCapacity = ((ym.lengthOfMonth()/7) + 1) * dows.size() ; // Maximum possible weeks * number of days per week.
List<LocalDate> dates = new ArrayList<>( initialCapacity );
for (int dayOfMonth = 1; dayOfMonth <= ym.lengthOfMonth() ; dayOfMonth ++) {
LocalDate ld = ym.atDay(dayOfMonth) ;
DayOfWeek dow = ld.getDayOfWeek() ;
if(dows.contains(dow)) {
// Is this date *is* one of the days we care about, collect it.
dates.add(ld);
}
}
TemporalAdjuster
Vous pouvez également utiliser l'interface TemporalAdjuster
qui fournit des classes qui manipulent les valeurs date-heure. La classe TemporalAdjusters
(notez le pluriel s
) fournit plusieurs implémentations pratiques.
Le projet ThreeTen-Extra fournit des classes fonctionnant avec java.time. Cela inclut une implémentation TemporalAdjuster
, Temporals.nextWorkingDay()
.
Vous pouvez écrire votre propre implémentation pour faire le contraire, un temporisateur nextWeekendDay
.
- 1. Comment obtenir toutes les dates dans un mois donné en C#
- 2. Comment obtenir toutes les dates affichées dans un QCalendarWidget
- 3. Vérifiez si deux dates contiennent un mois donné
- 4. tous les mercredis Grab dans un mois donné en PHP
- 5. Génération dynamique de toutes les dates dans un mois dans Crystal Reports
- 6. comment obtenir les jours pour un mois donné et année
- 7. voulait obtenir toutes les dates dans le résultat mysql
- 8. Comment obtenir les numéros de semaine d'un mois donné?
- 9. Obtenir toutes les références IProject dépendantes pour un IProject donné
- 10. Comment obtenir Nombre de mois et Jours De deux dates
- 11. Comment obtenir le nombre de jours dans un mois donné en utilisant Joda-Time?
- 12. MySQL: Requête pour obtenir toutes les lignes du mois précédent
- 13. Comment obtenir les dates de début et de fin du mois en cours
- 14. Linq2Sql comment obtenir toutes les dates distinctes sans temps partie
- 15. Obtenir les dates du premier et du dernier jour du mois précédent en C#
- 16. Comment obtenir Weekdays ordinales dans un mois
- 17. Créer tableau de mois entre deux dates
- 18. Créer un tableau ou une liste de toutes les dates entre deux dates
- 19. comment puis-je obtenir les dates de même et les semaines impaires en utilisant C#
- 20. Comment récupérer toutes les lignes insérées au cours d'un mois donné à l'aide de T-SQL
- 21. Algorithme de calcul du nombre d'événements se produisant toutes les deux semaines dans un mois civil donné
- 22. Comment obtenir toutes les entrées d'un LinkedHashMap en Java?
- 23. Obtenir toutes les variables de javascript dans JAVA
- 24. Recherche sur les plages de dates avec Lucene en Java?
- 25. Comment soustrais-tu les dates en Java?
- 26. Tableau de dates en Java
- 27. Obtenir toutes les sous-arborescences en valeur
- 28. Calculer en SQL le premier jour ouvrable d'un mois donné
- 29. Liste des dates en mois de la base de données
- 30. Comment comparer les dates en Java?
l'échantillon ne fonctionne pas correctement il donne la production: 2,3,9,10,16,17,23,24,30, mais pour janvier 2010 la liste de fin de semaine sont2,3,9,10,16,17, 23,24,30,31. S'il vous plaît dites-moi où est le pro – usman
Il y avait un bug dans la condition «while» où le dernier jour du mois était manqué. Je l'ai réparé maintenant. – mikej
Merci beaucoup mikej – usman