Почему часовые пояса GMT и UTC не имеют одинаковых правил - PullRequest
0 голосов
/ 16 ноября 2018

Почему нижняя строка печатает false? я думаю, что это должно напечатать истину.

TimeZone.getTimeZone("UTC+5:30").hasSameRules(TimeZone.getTimeZone("GMT+5:30")

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Поскольку вы находитесь в Индии, вы должны использовать

    ZoneId india = ZoneId.of("Asia/Kolkata");

Два сообщения:

  1. Класс TimeZone имеет проблемы с дизайном и давно устарел. То же самое касается его друзей, таких как Calender и SimpleDateFormat. Так что не используйте их. Вместо этого используйте java.time, современный Java API даты и времени. Его заменой для TimeZone является класс ZoneIdZoneOffset для смещения от UTC, но не используйте его в качестве часового пояса, а не один, см. Следующий элемент).
  2. Не используйте смещение от UTC или GMT в качестве часового пояса. Конечно, это работает в вашем конкретном случае, но может заставить читателя задуматься, почему вы выбрали +05: 30, что Asia/Kolkata явно передает. Также Asia/Kolkata ориентирован на будущее, если в какой-то момент политики изменят смещение UTC для Индии или введут летнее время (DST). Хотя это маловероятно для Индии, это происходит постоянно в других местах мира, поэтому лучше использовать привычку всегда использовать формат region / city .

Чтобы воспользоваться одним из многих преимуществ современного API для проектирования, попробуйте современную версию своего кода:

    ZoneId.of("UTC+5:30").getRules().equals(ZoneId.of("GMT+5:30").getRules())

Это броски: java.time.DateTimeException: Invalid ID for offset-based ZoneId: UTC+5:30. Теперь вы с самого начала знаете, что не так: UTC+5:30 не является действительным идентификатором часового пояса.

Ссылка: Обучающее руководство по Oracle: Дата и время , объясняющее, как использовать java.time.

0 голосов
/ 16 ноября 2018

Ответ находится в JavaDoc TimeZone # getTimeZone :

идентификатор для TimeZone, либо сокращение, такое как «PST», полное имя, такое как «America / Los_Angeles "или пользовательский идентификатор, такой как" GMT-8: 00 "

Возвращает : указанная часовая зона или зона GMT, если данный идентификатор не может быть понят.

И (из документации класса )

[...] Синтаксис идентификатора пользовательского часового пояса:

  CustomID:
     GMT Sign Hours : Minutes
     GMT Sign Hours Minutes
     GMT Sign Hours

Идентификатор "UTC+5:30" не является действительным идентификатором TimeZone (согласно спецификации метода / класса) и интерпретируется как зона «GMT», которая явно отличается от «GMT + 5: 30»зона. * * одна тысяча двадцать-три

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...