Synchronizacja czasu serwera z bazą danych, metoda now()

0

Cześć.

Powoli piszę moją webaplikację, która pozwala stworzyć sezon, a w nim konkursy na najlepsze (pod jakimś względem) zdjęcie. I oczywiście dany sezon ma swój czas rozpoczęcia i czas zakończenia (tak samo dany konkurs w sezonie). Problem pojawił mi się z synchronizacją podczas zapisywania czasu do bazy danych i pobierania go, a raczej chyba nie do końca rozumiem jak to działa.

Załóżmy jest godzina 15:00 u mnie na komputerze.
Taki insert wykonany bezpośrednio z pliku .sql:

INSERT INTO seasons VALUES  (1, now(), 'sezon 2016 wiosna', '2016-08-05 18:00:00', 'WIOSNA', now(), 2);

wrzuci mi do bazy nowy sezon gdzie metoda now() rzeczywiście da godzinę 15:00.

Teraz z poziomu angulara rzucam GET request'a o sezony. On wyciąga milisekundy, które według czasu GMT wskazują rzeczywiście na 15:00, jednak mój time zone dodaje mi 2H (nie wiem czemu nie 1H, ale już pomijam to) i wyskakuje godzina 17:00 (używam momentjs który z milisekund od 1970 ustawia domyślnie odpowiednią datę i godzinę).

Teraz odwrotna sytuacja:
z poziomu klienta sam tworzę sezon i ustawiam na formularzu datę rozpoczęcia na 15:00 po czym rzucam POST'a zapisując sezon (metoda restowa zapisuje sezon używając metody 'save' interfejsu rozszerzającego odpowiednie CrudRepository, które dostarcza Spring Boot). W bazie pojawia mi się krotką z następującą datą: 2016-06-04 13:00:00. Gdy chcę wypisać tę datę, którą reprezentuje klasa DateTime (z JodaTime):

 System.out.println("start date -> " + startDate);

daje:
start date -> 2016-06-01T15:00:00.000+02:00

Przy okazji metoda DateTime.now() wypisuje 2016-05-29T15:00:00.000+02:00 (zakładając że na komputerze jest godzina 15:00).

I tak nie bardzo mam pomysł jak to skonfigurować, dlatego proszę o pomoc i częściowe wyjaśnienie mechaniki tego.

1

do operacji na bazie (insert/update) używaj zawsze czasu serwera - nie podawaj go tylko wstawiaj now() - to Ci da gwarancję, że czas dodania będzie zawsze w tej samej strefie i niezależny od tego co ma ustawione user. Co do wyświetlania to musisz sam sprecyzować jak się ma zachować u kogoś kto jest w strefie np. +5h

0

@abrakadaber ależ oczywiście, że będę używał metody now() z bazy danych; jednak czemu JodaTime przy metodzie DateTime.now() daje mi czas 2h później? A przy wyciąganiu z bazy sobie odejmuje 2h. Nie wiem za bardzo jak to skonfigurować.

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