Jak obsłużyć w javie zmianę czasu czy jest jakiś sposób? Oprócz restartu
Java 8 (1.8.0_191)
Pytanie jest niejasne.
Prawdopodobnie nic nie musisz robić.
Napisz gdzie masz problem.
Jeśli się nie mylę za to odpowiada czas systemowy i jeśli bierzesz gdzieś .now()
to to bierze właśnie czas systemowy
danek napisał(a):
Jeśli się nie mylę za to odpowiada czas systemowy i jeśli bierzesz gdzieś
.now()
to to bierze właśnie czas systemowy
To nie rozwiązuje problemów typu:
- połączenia zaczęło się 2 minuty przed zmianą czasu (wg czasu systemowego)
- połączenie skończyło się wcześniej (wg czasu systemowego) niż się zaczęło
Ile czasu trwało połączenie?
Może rozwiązaniem (ale jakiego problemu?) będzie arytmetyka na datach z uwzględnieniem stref czasowych?
@darksead: Bez zdefiniowania problemu nie będziesz mógł znaleźć rozwiązania.
Ciekawa prezentacja na tego typu tematy od Tomasza Nurkiewicza, niestety nie uwzględniała API czasu od Javy 8
Zrobiłem kilka testów i wygląda na to że nie musze na razie nic robić.Aplikacja działa prawidłowo. Miałem obawy o liczenie różnic czasowych między otrzymanymi wiadomościami. Operuje na Date.getTime i wygląda że wszystko śmiga prawidłowo.
Bierz też pod uwagę strefy czasowe, bo w przyszłości to cię może kiedyś uderzyć (jeśli to coś będziesz rozwijać, a nie tylko testować)
Jest rok 2019 i nie powinieneś używać klasy java.uitl.Date
-java.time.LocalDateTime
to lepsza alternatywa.
https://stackoverflow.com/questions/25747499/java-8-calculate-difference-between-two-localdatetime
Zmiana czasu to kwestia timezony, więc ZonedDateTime.
Najlepiej mieć serwery w UTC a to jaką klient ma strefę czasową rozwiązywać z ustawionych locale.
Użycie java.uitl.Date niesie ze sobą jakieś zagrożenia? Bo aplikacja ma już jakieś 4-5 lat i przerabianie na java.time.LocalDateTime raczej nie wchodzi w grę
Nie niesie informacji o strefie czasowej oraz jest mutowalna. Poza tym spoko, wiele narzędzi wspiera ten typ. Możesz stopniowo wprowadzać typy z java.time