In meinem Skript muss ich eine Reihe von Aktionen über verschiedene Datumsbereiche hinweg ausführen, wobei ein Start- und ein Enddatum angegeben werden.
Bitte geben Sie mir eine Anleitung, um dies mit Java zu erreichen.
for ( currentDate = starDate; currentDate < endDate; currentDate++) {
}
Ich weiß, dass der obige Code einfach unmöglich ist, aber ich mache es, um Ihnen zu zeigen, was ich erreichen möchte.
Antworten:
Nun, Sie könnten so etwas mit der Zeit-API von Java 8 tun, speziell für dieses Problem
java.time.LocalDate
(oder den entsprechenden Joda-Zeitklassen für Java 7 und älter).Ich würde gründlich mit empfehlen
java.time
(oder Joda Time) über die eingebauten inDate
/Calendar
Klassen.quelle
import
Anweisungen.JodaTime ist jedoch der Vollständigkeit halber und / oder wenn Sie API-bereitgestellte Funktionen bevorzugen, nett. Hier sind die Standard-API-Ansätze.
Wenn Sie mit
java.util.Date
Instanzen wie den folgenden beginnen:Hier ist der Legacy-
java.util.Calendar
Ansatz für den Fall, dass Sie noch nicht mit Java8 arbeiten:Und hier ist der
java.time.LocalDate
Ansatz von Java8 , im Grunde genau der JodaTime-Ansatz:Wenn Sie möchten , zu Iterierte inklusive das Enddatum, dann verwenden
!start.after(end)
und!date.isAfter(end)
jeweils.quelle
Java 8- Stil unter Verwendung der Klassen java.time :
Ausgabe:
Alternative:
Java 9 hat die Methode DatumsUntil () hinzugefügt :
quelle
Dies ist im Wesentlichen die gleiche Antwort, die BalusC gegeben hat, jedoch mit einer while-Schleife anstelle einer for-Schleife etwas besser lesbar:
quelle
Apache Commons
quelle
addDays(..)
und es wird noch kürzer.quelle
quelle
Wir können die Logik auf verschiedene Methoden für Java 7, Java 8 und Java 9 migrieren :
Dann können wir diese Methoden aufrufen als:
Die Ausgabe wäre:
quelle
Date
und derCalendar
Unterricht wurden vor Jahren durch den Java.time- Unterricht ersetzt. Insbesondere ersetzt durchInstant
undZonedDateDate
.Hier ist Java 8-Code. Ich denke, dieser Code wird Ihr Problem lösen. Viel Spaß beim Codieren
quelle
Warum nicht Epoche benutzen und einfach durchschleifen?
quelle
Sie können eine Klasse wie diese schreiben (Iterator-Schnittstelle implementieren) und darüber iterieren.
und benutze es wie:
quelle
Sie können dies versuchen:
quelle
Auf diese Weise können Sie 30 Tage zurück beginnen und bis zum heutigen Datum durchlaufen. Sie können den Datums- und Richtungsbereich leicht ändern.
quelle