Есть ли способ получить значение TimeZone, используя отметку времени - PullRequest
0 голосов
/ 21 марта 2020

Это значение, которое у меня есть,

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

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

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

как Ouput. Заранее спасибо.

1 Ответ

3 голосов
/ 21 марта 2020

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

получить значение 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]
...