Es gibt mehr als einen Weg zu gehen. Hier ist ein Vorschlag:
public static long noOfMondaysBetween(LocalDate first, LocalDate last) {
if (last.isBefore(first)) {
throw new IllegalArgumentException("first " + first + " was after last " + last);
}
// find first Monday in interval
LocalDate firstMonday = first.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
// similarly find last Monday
LocalDate lastMonday = last.with(TemporalAdjusters.previous(DayOfWeek.MONDAY));
// count
long number = ChronoUnit.WEEKS.between(firstMonday, lastMonday);
// add one to count both first Monday and last Monday in
return number + 1;
}
Zum Beispiel noOfMondaysBetween(LocalDate.of(2017, Month.JUNE, 15), LocalDate.of(2017, Month.JUNE, 15))
0 zurück Es kann ein wenig subtil sein, dass der Code diesen Fall berücksichtigt: Erster Montag Juni 19 und letzte ist 12. Juni Graf von Wochen zwischen den beiden Montag ist -1, also wenn ich 1 addiere, ist das Ergebnis 0, was korrekt ist. Um die Montage im Juni zählen:
System.out.println(noOfMondaysBetween(LocalDate.of(2017, Month.MAY, 31), LocalDate.of(2017, Month.JULY, 1)));
Ergebnis:
4
Wenn Sie das erste Datum in der Zählung enthalten soll (wenn es ein Montag ist), verwenden nextOrSame(DayOfWeek.MONDAY)
statt next(DayOfWeek.MONDAY)
. Ähnlich wie das zweite Datum verwenden Sie previousOrSame(DayOfWeek.MONDAY)
.
könnten Sie Ihren Code posten, damit wir verstehen, welchen Ansatz Sie wählen – Blip
Was meinen Sie mit "* zwischen * zwei Daten"? Sind Start- und Endtermine im Suchbereich enthalten oder ausgeschlossen? Nehmen wir an, das Startdatum ist ein bestimmter Montag und der letzte Tag ist der nächste Montag. Sollte das Ergebnis 0 Montags zwischen oder vielleicht 2 sein? – Pshemo
Durchsuchen Sie Stack Overflow immer gründlich, bevor Sie es posten. Sie können davon ausgehen, dass ein grundlegendes Datum-Uhrzeit-Thema bereits gestellt und beantwortet wurde. –