Wiem, że jest wiele pytań na temat SO, ale chcę i przykład przy użyciu nowego interfejsu API Java 8 Date. Znam również bibliotekę JodaTime, ale chcę sposób pracy bez bibliotek zewnętrznych.
Funkcja musi narzekać na te ograniczenia:
- Zapobiegaj błędom od daty oszczędzania
- Dane wejściowe to dwa obiekty Data (bez czasu znam lokalny czas, ale muszę zrobić z instancjami daty)
DAYS.between(localDate1, localDate2)
.Odpowiedzi:
Jeśli chcesz logiczne dni kalendarzowe , użyj
DAYS.between()
metody zjava.time.temporal.ChronoUnit
:Jeśli chcesz dosłownie 24 godziny na dobę ( czas trwania ), możesz
Duration
zamiast tego skorzystać z zajęć:Aby uzyskać więcej informacji, zapoznaj się z tym dokumentem .
źródło
Duration.between(today.atTime(0, 0), yesterday.atTime(0, 0)).toDays()
.today.atTime(0, 0)
ciebie możesz to zrobićtoday.atStartOfDay()
.ChronoUnit.DAYS.between(firstDate, secondDate)
Na podstawie komentarzy VGR tutaj możesz użyć:
źródło
Możesz użyć
until()
:źródło
until
polega na tym, że zwraca obiekt okresu . To zwróci liczbę lat / miesięcy / dni między dwiema datami, a nie faktyczną liczbę dni. A getDays () w okresie zwraca tylko część dni (nie biorąc pod uwagę liczby lat lub miesięcy), a nie całkowitą liczbę dni. Druga wersja działa dokładnie tak, jak trzeba, aby uzyskać liczbę dni między dwiema datami.Możesz używać
DAYS.between
zjava.time.temporal.ChronoUnit
na przykład
źródło
Możemy użyć metody between () z ChronoUnit enum:
ChronoUnit.DAYS zlicza dni, które ukończyły 24 godziny .
źródło
Użyj DAYS in enum java.time.temporal.ChronoUnit . Poniżej znajduje się przykładowy kod:
Dane wyjściowe: * Liczba dni między datą rozpoczęcia: 01.03.2015 a datą zakończenia: 2016-03-03 wynosi ==> 368. ** Liczba dni między datą rozpoczęcia: 03.03.2016 i datą zakończenia: 01.03.2015 jest ==> -368 *
źródło
Wszyscy mówią, aby używać ChronoUnit.DAYS.between, ale to tylko deleguje na inną metodę, którą możesz nazwać sobą. Więc możesz też zrobić
firstDate.until(secondDate, ChronoUnit.DAYS)
.Dokumenty dla obu faktycznie wspominają o obu podejściach i mówią, aby użyć tego, który jest bardziej czytelny.
źródło
Proszę bardzo:
źródło
Uzyskaj liczbę dni przed świętami Bożego Narodzenia od bieżącego dnia, spróbuj tego
źródło
Jeśli celem jest uzyskanie różnicy w dniach, a ponieważ powyższe odpowiedzi wspominają o metodach delegowania, chcielibyśmy zauważyć, że kiedyś można po prostu użyć -
źródło
źródło
Wiem, że to pytanie dotyczy Java 8, ale w Javie 9 możesz użyć:
źródło
Użyj klasy lub metody, która najlepiej odpowiada Twoim potrzebom:
Czas trwania mierzy czas przy użyciu wartości opartych na czasie (sekundy, nanosekundy).
Okres używa wartości opartych na dacie (lata, miesiące, dni).
Metoda ChronoUnit.between jest przydatna, gdy chcesz zmierzyć ilość czasu w pojedynczej jednostce czasu, na przykład dni lub sekund.
https://docs.oracle.com/javase/tutorial/datetime/iso/period.html
źródło