Ile godzin minęło od daty xyz do daty xyz?

0

Cześć,

Opis zadania: mam do obliczenia ile godzin i minut minęło od daty xyz z godziną xyz do daty abc z godziną abc, mam już zrobioną część ale mam problem z pełnymi godzinami i pierwszymi minutami. Może ktoś pomoże jak rozwiązać ten problem? Może jak lepiej napisać rozwiązanie?

Kod:

public class PauseHours {
    LocalDate startWork;
    LocalTime startTime;
    LocalDate endWork;
    LocalTime endTime;

    public PauseHours(int startYear, int startMonth, int startDay, int startHour, int startMinutes,
                      int endYear, int endMonth, int endDay, int endHour, int endMinutes) {
        this.startWork = LocalDate.of(startYear,startMonth,startDay);
        this.endWork = LocalDate.of(endYear, endMonth, endDay);
        this.startTime = LocalTime.of(startHour,startMinutes);
        this.endTime = LocalTime.of(endHour, endMinutes);
    }

    public int allDayOfPause() {
        int startYear = startWork.getYear();
        int endYear = endWork.getYear();

        if (endYear != startYear){
            int sum = endWork.lengthOfYear() - endWork.getDayOfYear();
            int sumAll = sum + startWork.getDayOfYear();
            return sumAll * 24 - 24;
        } else {
            int sum = startWork.getDayOfYear() - endWork.getDayOfYear();
            int toHours = sum * 24;
            return toHours - 24;
        }

    }
    public int otherHours() {
        int endHours =  endTime.MAX.getHour() - endTime.getHour();
        int startHours = startTime.getHour() - startTime.MIN.getHour();

        int sumHours  = endHours + startHours;

        return sumHours;
    }
    public int otherMinutes() {
        int averageEndMinutes = endTime.MAX.getMinute() - endTime.getMinute() + 1;
        int averageStartMinutes = startTime.getMinute() - startTime.MIN.getMinute() + 1;
        int sumMinutes = averageEndMinutes + averageStartMinutes + 1;

        if (sumMinutes >= 60) {
            int sum = otherHours() + 1;
            return 0;
        } if(sumMinutes == 0) {
            return otherHours() + 1;

        } else {
            return sumMinutes;
        }

    }
    public String sumOfAllPause() {
        int sumOfHours = allDayOfPause() + otherHours();

        if (sumOfHours < 45) {
            System.out.println("Pauza skrócona !!!");
        } else {
            System.out.println("Pauza prawidłowa 45h :)");
        }
        return sumOfHours + "h " + otherMinutes() + "min";
    }

    @Override
    public String toString() {
        return "Pauza :" +
                "\n Zakończenie= " + endWork + " " + endTime + " " +
                "\n Start= " + startWork + " " + startTime +
                "\n Godziny pauzy: " + sumOfAllPause() ;
    }
}

Wywołanie

PauseHours example = new PauseHours(2019,03,04,04,02,2019,03,01,19,01);

        System.out.println(example);

Konsola:

Pauza prawidłowa 45h :)
Pauza :
Zakończenie= 2019-03-01 19:01
Start= 2019-03-04 04:02
Godziny pauzy: 56h 0min

0

To jest na studia czy dla siebie coś piszesz?
Dlaczego nie połączysz LocalDate i LocalTime w LocalDateTime?
I dlaczego nie przyjmujesz w konstruktorze LocalDateTime (czy LocalDate i LocalTime) tylko inty?
Łatwiej byłoby użyć np. klasy Duration i metody between.
Możesz poczytać: https://www.baeldung.com/java-period-duration
https://ideone.com/ig4nSp

0

To jest dla siebie, dopiero się uczę i dlatego tak to wszystko napisałem,

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