Есть ли способ получить значение TimeZone, используя отметку времени

Это ценность, которая у меня есть,

Sun Mar 29 2020 02:55:00 GMT+0530

и я хочу получить, например

Азия/Калькутта

как вывод. Заранее спасибо.


person Ayushi Verma    schedule 21.03.2020    source источник
comment
Или Азия/Коломбо? (В этот день также +05;30.)   -  person Ole V.V.    schedule 21.03.2020


Ответы (1)


Смещение не указывает зону

получить значение TimeZone, используя отметку времени

No.

Вы не можете определить часовой пояс по смещению.

Многие часовые пояса могут иметь одно и то же смещение от UTC (количество часов, минут и секунд впереди или позади нулевого меридиана).

См. список названий часовых поясов в Википедии. Нажмите на заголовок столбца, чтобы отсортировать по смещению. Обратите внимание, как часто несколько зон имеют одно и то же смещение.

Конкретно для вашего примера обратите внимание, что в настоящее время у нас есть две зоны, которые по совпадению имеют смещение на пять с половиной часов раньше UTC:

  • Asia/Kolkata (Индия)
  • Asia/Colombo (Шри-Ланка)

Таким образом, без дальнейшего ввода невозможно узнать, имел ли в виду автор вашей входной строки время Индии или время Шри-Ланки.

Кстати, имя Asia/Calcutta изменено на Asia/Kolkata. Если ваша система не имеет такого имени, то ваши tzdata устарели на несколько лет. Всегда обновляйте все копии tzdata в операционных системах, серверах баз данных, таких как Postgres, и средах выполнения, таких как Java.

Еще одна сложность: политики часто меняют смещение, используемое в их юрисдикциях.

Таким образом, хотя сегодня вся Индия использует одно и то же смещение +05:30, это не всегда было так и вряд ли всегда будет так в будущем (исходя из истории того, как часто меняются зоны по всему миру).

ИСО 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]
person Basil Bourque    schedule 21.03.2020