Сравнение часового пояса клиента с сервером и получение локального времени клиента, если оно отличается - PullRequest
0 голосов
/ 29 марта 2020

В моей настройке у меня есть сервер и клиент, я должен знать, находятся ли они в одном часовом поясе (и поэтому это одно и то же местное время).

Клиент может отправить на сервер зону Идентификатор (например, «Европа / Берлин»), смещение часового пояса от GMT с настройками перехода на летнее время (int) или необработанное смещение без регулировки перехода на летнее время (int).

Если часовой пояс одинаков, то я могу предположить, (поправьте меня, если я ошибаюсь) локальное время клиента совпадает с локальным временем сервера, иначе мне нужно получить локальное время клиента.

Я видел, что есть несколько классов в java, ZoneId, ZoneOffset и TimeZone, я немного запутался, какой использовать. Что касается ввода, я думал об использовании идентификатора зоны или смещения с настройками перехода на летнее время.

Спасибо за помощь

ОБНОВЛЕНИЕ: Я просто хочу добавить, что я имею в виду как часовой пояс сервера ссылка для меня и не определяется как системная по умолчанию. В моем случае я рассматриваю его как ZoneId.of ("Европа / Рим").

1 Ответ

2 голосов
/ 29 марта 2020

"Если часовой пояс одинаков, поэтому я могу предположить (исправьте меня, если я ошибаюсь), локальное время клиента совпадает с локальным временем сервера, в противном случае мне нужно получить локальное время клиента." , да , Если часовой пояс клиента равен часовому поясу сервера, оба локальных времени идентичны.

TimeZone - это класс, используемый старыми классами Java для обработки дат. Не используйте его.

ZoneId - это класс из нового пакета java.time, который намного надежнее и имеет более приятный дизайн. Он описывает часовой пояс, подобный «Европа / Берлин» . Этот класс используется для включения в расчет таких вещей, как настройки перехода на летнее время. A ZoneId использует различные ZoneOffset в расчете в зависимости от зимнего и летнего времени. Таким образом, ZoneOffset - это класс из нового пакета, описывающий заданные c смещения независимо от других факторов, например, настроек летнего времени.

Поскольку вас интересует местное время часового пояса, вы должны использовать ZoneId здесь. Вы также можете использовать ZoneOffset, но вы потеряете информацию об указанном c часовом поясе, потому что несколько часовых поясов могут иметь одинаковое смещение.

...