Duration w bazie danych

0

Witam w bazie danych chcę przechować pewien odstęp czasu pomiędzy dwiema godzinami. Różnica ma być w formacie HH:MM. Zrobiłem to tak, że przechowuję ją w łańcuchu znaków, ponieważ będzie ona tylko wyświetlana na froncie. Nie wiem czy jest to elegancki sposób, dlatego chcę zapytać czy można to zrobić nie konwertując tego na łańcuch znaków a np zapisywać w bazie jako obiekt Duration. Zrobiłem to w taki sposób, w mojej encji:

public String getDuration() {
        int hoursPart = Duration.between(departureTime, arrivalTime).toHoursPart();
        int minutesPart = Duration.between(departureTime,arrivalTime).toMinutesPart();
        return hoursPart +" " + "h" + " " + minutesPart + " " + "m";
    }

2
ThygeRRR097 napisał(a):

Różnica ma być w formacie HH:MM.
.
ponieważ będzie ona tylko wyświetlana na froncie.

Przynajmniej tak ci się dziś wydaje.
Dane się przechowuje w ich naturalnej dziedzinie liczbowej lub analogicznej, a nie formaty

Ręczne formatowanie masz niezgodnie z własnym założeniem, a java ma fajnie środki do formatowania
https://www.baeldung.com/java-printstream-printf
https://docs.oracle.com/javase/tutorial/java/data/numberformat.html

(podając tip, nie oznacza to, że przechowywanie formatowanej wartości pochwalam - bo nie)

0

@AnyKtokolwiek: dokładnie, o tym samym pomyślałem po chwili przemyślenia

1

Jak chcesz się wspiąć na wyżyny over-engineeringu to custom type z Hibernate pasuje tutaj jak ulał https://www.baeldung.com/hibernate-custom-types lub (dużo prostszy) konwerter https://thorben-janssen.com/jpa-tips-map-duration-attribute/
wtedy na encji będzie Duration getSomething() (getDuration to słaba nazwa), a do bazy zapisze się jak chcesz.

Tak jak pisze @AnyKtokolwiek niech UI formatuje sobie to duration tak jak się jemu podoba, najlepiej im wysłać duration w milisekundach lub sekundach i nie sobie wyświetlają jak chcą.

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