Liczenie na dniach miesiąca

Liczenie na dniach miesiąca
F1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
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ś:

Kopiuj
        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ć:

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

danek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 797
0

Period i dodatkowo mozesz poczytać o Duration

F1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
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?

danek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 797
0

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

Kopiuj
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 ;)

F1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
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.

WY
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 134
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 ?

F1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.