2017-06-15 10 views
-5

Kann jemand die Logik vorschlagen, um die Nr. Herauszufinden. von Montags zwischen zwei Daten in Java?Anzahl der Montage zwischen zwei Daten in Java

Anstatt alle Tage durchzulaufen, gibt es einen anderen Ansatz, um das Nein zu zählen. von Vorkommen von Montags zwischen zwei Daten in Java

+3

könnten Sie Ihren Code posten, damit wir verstehen, welchen Ansatz Sie wählen – Blip

+2

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

+0

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. –

Antwort

0

Ich bin kein Java-Programmierer, aber ich bin ein Programmierer. Hier ist, wie ich das lösen würde:

1) Zählen Sie die Tage zwischen den beiden Daten (aka DATESPAN). Ich bin sicher, Java hat eine Funktion dafür.

2) Erhalten Sie den "Wochentag" (als eine Zahl, vorausgesetzt, dass Montag = 1) von beiden Daten. Ich bin sicher, Java hat auch dafür eine Funktion. Wir müssen wissen, ob es ein Montag ist.

3) Wenn Datespan < 7 Mit dieser Logik: Antwort = Enddatum Anzahl> Datespan 0: 1

4) IF Datespan> = 7 WEITER Antwort erhalten:

5) Teilen Sie die DATESPAN von 7.

6) Wenn es einen Rest aus der Division gibt, verwenden Sie den Mindestwert des Quotienten für die Antwort.

7) Wenn kein Rest vorhanden ist, überprüfen Sie das Startdatum und das Enddatum. Wenn beide ein Montag sind, ist der Quotient die Antwort, wenn nicht der Quotient - 1 ist die Antwort

+1

Es ist nicht kugelsicher. Der 12. Juni war ein Montag. Wenn ich den 10. Juni und den 14. Juni nehme, sollte die Antwort 1 sein. Die Division ergibt 0 mit einem Rest von 4, also sollte nach deinem Punkt 4) 0 die Antwort sein. Aber du bist nah dran. –

+0

oops, nicht in Betracht gezogen, wenn der Zeitunterschied weniger als 7 Tage war. – Scotty

+0

Ich habe meine Antwort oben aktualisiert, um einen Zeitraum von weniger als sieben Tagen zu berücksichtigen – Scotty

2

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).

Verwandte Themen