Liczenie na dniach miesiąca

0

Mam napisać, że wypłatę dostaję 25 dnia każdego miesiąca i żeby pokazywało ile dni zostało do wypłat. Zacząłem pisać wstępnie takie coś:

        int dayToday = LocalDate.now().getDayOfMonth();
        int paymentDate = 25;
        if (dayToday == paymentDate) {
            System.out.println("Today is your salary!");
        } else if (dayToday<paymentDate){
            System.out.println("To your payment left " + (paymentDate-dayToday) + " days");

Ale nie wiem jak odpowiednio pobrać dni z miesiąca, żeby mi pokazywało ile zostało do wypłaty jak jest dzień miesiąca po 25.
Zacząłem też z takim czymś próbować:

LocalDate dayToday = LocalDate.now().withDayOfMonth(LocalDate.now().getDayOfMonth());

Ale nie wiem jak ustawić zmienną 25 dnia miesiąca jako LocalDate, dlatego w tym pierwszym kodzie, zmieniłem to na int, żeby zmienną 25 też na int, no ale nie wiem jak teraz rozpisać zależności jak rozpoznać który jest miesiąc, czy ma 30, 31, 27 czy 28 dni i jak policzyć ile dni zostało do 25 dnia kolejnego miesiąca.

0

Period i dodatkowo mozesz poczytać o Duration

0

Próbowałem przez Period, tylko nie wiem, jak zapisać stałą 25 jako LocalDate? Jak zapisać taką stałą żeby liczyło 25 dzień w każdym miesiącu? No bo datę zapisać, np. 25.04.2019 umiem, i wiem jak z tego policzyć ile dni zostało do wypłaty, ale jak zapisać żeby w każdym miesiącu i w każdym roku brało 25 dzień? Żeby zczytać z daty 25.xx.xxxx? Czy można ustawić 25.00.0000?

0

Możesz 'skopiować' dane z obecnej daty. Przykład:

int count(LocalDate l){
        if(l.getDayOfMonth()>25){
            return Period.between(l,LocalDate.of(l.getYear(),l.getMonth().plus(1),25)).getDays();
        }else{
            return Period.between(l,LocalDate.of(l.getYear(),l.getMonth(),25)).getDays();
        }
    }

Nie działa poprawnie dla każdego przypadku, więc pomyśl kiedy to da niepoprawny wynik ;)

0

Hmm widzę że dla grudnia to to nie działa, po 25 grudnia :P Dzięki wielkie, bardzo mi pomogłeś :) Jeszcze sobie przemyślę to czy z tym grudniem mogę zrobić, żeby nie pokazywało -1.

0

Jeżeli jest większe od 25 to nie możesz po prostu policzyć ile zostało dni do końca miesiąca i dodać 25?
czyli coś takiego:
(LocalDate.now().getMonth().length(leapYear) - dayToday) + paymentDay ?

0

Napisałem odpowiednie warunki i wszystko działa :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1