Поскольку вы находитесь в Индии, вы должны использовать
ZoneId india = ZoneId.of("Asia/Kolkata");
Два сообщения:
- Класс
TimeZone
имеет проблемы с дизайном и давно устарел. То же самое касается его друзей, таких как Calender
и SimpleDateFormat
. Так что не используйте их. Вместо этого используйте java.time, современный Java API даты и времени. Его заменой для TimeZone
является класс ZoneId
(и ZoneOffset
для смещения от UTC, но не используйте его в качестве часового пояса, а не один, см. Следующий элемент).
- Не используйте смещение от 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
.