Смещение не указывает зону
получить значение TimeZone, используя отметку времени
Нет.
Вы не можете определить часовой пояс по смещению.
Многие часовые пояса могут иметь одно и то же смещение от UT C (количество часов-минут-секунд впереди или позади основного меридиана).
См. список названий часовых поясов в Википедии. Нажмите на заголовок столбца, чтобы отсортировать по смещению. Обратите внимание, как часто несколько зон имеют одинаковое смещение.
Определите c в своем примере, обратите внимание, что в настоящее время у нас есть две зоны, которые по совпадению имеют смещение на пять с половиной часов до UT C:
Asia/Kolkata
(Индия) Asia/Colombo
(Шри-Ланка)
Таким образом, без дальнейшего ввода нет никакого способа узнать, предполагал ли автор вашей входной строки индийское время или Шри Время Ланки.
Кстати, имя Asia/Calcutta
было изменено на Asia/Kolkata
. Если ваша система не имеет такого имени, то tzdata устарела на несколько лет. Всегда обновляйте все копии tzdata в операционных системах, серверах баз данных, таких как Postgres, и средах выполнения, таких как Java.
Еще одно осложнение: политики часто меняют смещение, используемое в их юрисдикциях.
Таким образом, в то время как вся Индия сегодня использует одинаковое смещение +05: 30, это не всегда имело место, и вряд ли это будет всегда так в будущем (основываясь на истории того, как часто зоны меняются по всему миру).
ISO 8601
Стандарт ISO 8601 определяет множество разумных форматов для представления значений даты и времени в виде текста.
2020-01-23T12:34:56.123456789+05:30
Структура java .time , встроенная в Java 8 и более поздние версии, расширяет один из этих форматов, добавляя название часового пояса в квадратных скобках. Я предлагаю использовать этот формат, если это возможно.
2020-01-23T12:34:56.123456789+05:30[Asia/Kolkata]