W moim skrypcie muszę wykonać zestaw działań w zakresie dat, podając datę rozpoczęcia i zakończenia.
Proszę o wskazówki, jak to osiągnąć za pomocą języka Java.
for ( currentDate = starDate; currentDate < endDate; currentDate++) {
}
Wiem, że powyższy kod jest po prostu niemożliwy, ale robię to, aby pokazać Ci, co chciałbym osiągnąć.
Odpowiedzi:
Cóż, możesz zrobić coś takiego, używając API time-API Java 8 , specjalnie dla tego problemu
java.time.LocalDate
(lub równoważnych klas Joda Time dla Java 7 i starszych)Chciałbym dokładnie polecam korzystania
java.time
(lub Joda Time) na wbudowanychDate
/Calendar
klas.źródło
import
instrukcje.JodaTime jest jednak fajny, ze względu na kompletność i / lub jeśli wolisz funkcje dostarczane przez API, oto standardowe podejścia do API.
Rozpoczynając z
java.util.Date
przykładami takimi jak poniżej:Oto starsze
java.util.Calendar
podejście na wypadek, gdybyś nie korzystał jeszcze z Java8:A oto
java.time.LocalDate
podejście Java8 , w zasadzie dokładnie podejście JodaTime:Jeśli chcesz iteracyjne włącznie datę końcową, a następnie użyć
!start.after(end)
i!date.isAfter(end)
odpowiednio.źródło
Styl Java 8 , przy użyciu klas java.time :
Wynik:
Alternatywny:
Java 9 dodała metodę dateUntil () :
źródło
Jest to zasadniczo ta sama odpowiedź, której udzielił BalusC, ale nieco bardziej czytelna dzięki pętli while zamiast pętli for:
źródło
Apache Commons
źródło
addDays(..)
a będzie on jeszcze krótszy.źródło
źródło
Możemy przeprowadzić migrację logiki do różnych metod dla Java 7, Java 8 i Java 9 :
Następnie możemy wywołać te metody jako:
Wynik byłby następujący:
źródło
Date
iCalendar
klasy zostały wyparte przez klasy java.time wiele lat temu. W szczególności zastąpione przezInstant
iZonedDateDate
.Oto kod Java 8. Myślę, że ten kod rozwiąże Twój problem. Miłego kodowania
źródło
Dlaczego nie użyć epoki i łatwo przejść przez pętlę.
źródło
Możesz napisać podobną klasę (implementując interfejs iteratora) i iterować po niej.
i używaj go jak:
źródło
Możesz spróbować tego:
źródło
Pomoże Ci to rozpocząć 30 dni wstecz i przejść do dzisiejszej daty. możesz łatwo zmienić zakres dat i kierunek.
źródło