Грувово: Каков масштаб изменения часового пояса при вызове TimeZone.setDefault(…)

Вопрос или проблема

Описание существующей среды:
Существует облачный экземпляр JIRA, работающий по всему миру на нескольких узлах.
JIRA поддерживает Groovy скрипты.
Один из скриптов используется для проверки и установки значений определённых пользовательских полей при создании новых задач JIRA и переходах задач через рабочий процесс JIRA.
Некоторые из затронутых пользовательских полей представляют дату и время (например, “Срок выполнения”, “Исправлено на” и т.д.), соответственно скрипт должен иметь возможность обрабатывать их.

Внутри скрипта – перед выполнением основных операций – временная зона временно устанавливается на UTC (для получения “предопределённой” временной зоны и формата даты и времени):

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

Примечание: временная зона устанавливается не для вошедшего в систему пользователя, а “в общем”, как описано выше.

Вопросы:

  1. Каков объем изменения временной зоны при таком вызове?
  2. Может ли такой вызов повлиять на то, как пользователи JIRA видят значения даты и времени в JIRA?
  3. Если какая-либо задача JIRA, не обработанная скриптом, была добавлена или изменена во время выполнения скрипта, когда временная зона была изменена – повлияет ли это на значения этой задачи (например, когда скрипт вернет временную зону к первоначальному значению)?

Документация Groovy не указывает объем изменения.
Документация JAVA сообщает, что изменение затрагивает “виртуальную машину Java“.

Как это реализуется в скрипте Groovy, работающем с экземпляром JIRA? Изменит ли это стандартную временную зону только для виртуального пространства скрипта, или для всех скриптов Groovy на этом узле, или также для текущего узла с экземпляром JIRA, или даже для всех узлов?

Ответ или решение

Ответ на вопрос о пределах изменения часового пояса с помощью вызова TimeZone.setDefault(…)

Описание среды:

В данном случае, у нас есть экземпляр JIRA в облаке, который работает по всему миру на нескольких узлах. JIRA поддерживает скрипты на Groovy, и один из таких скриптов используется для проверки и установки значений в определенные пользовательские поля при создании новых задач и их переходе через рабочий процесс.

Пределы изменения часового пояса:

  1. Каков масштаб изменения часового пояса с помощью вызова TimeZone.setDefault()?
    Вызов TimeZone.setDefault(TimeZone.getTimeZone("UTC")); будет изменять значение часового пояса для всей виртуальной машины Java (JVM), в которой исполняется скрипт Groovy. Это означает, что после выполнения этого вызова все операции с датой и временем в текущей JVM будут использовать установленный часовой пояс по умолчанию (в данном случае UTC).

  2. Может ли этот вызов повлиять на то, как пользователи JIRA видят значения даты и времени в JIRA?
    Да, такой вызов может оказать влияние на отображение значений даты и времени для пользователей JIRA, если в процессе выполнения сценария или в зависимости от системы логики JIRA используется настраиваемый часовой пояс, который отличается от установленного по умолчанию. Однако следует отметить, что большинство пользовательских интерфейсов в JIRA обычно основываются на личных настройках часового пояса пользователей, и менять отображение времени на уровне самого JIRA не следует.

  3. Если во время выполнения скрипта будет добавлен или изменен JIRA-вопрос, и изменится часовой пояс, повлияет ли это на значения этого вопроса (например, когда скрипт вернет часовой пояс обратно на оригинальное значение)?
    Время, установленное в задачах JIRA, обычно может храниться в формате UTC в базе данных или в локальном часовом поясе. При манипуляциях через сценарий, если часы будут изменены на другой часовой пояс после выполнения скрипта или до его завершения, может возникнуть несоответствие между временными метками в базе данных и часовым поясом, установленным для текущей сессии. Если скрипт изменяет часовой пояс обратно к начальному значению после его выполнения, это не вернёт значения, которые были уже зафиксированы во время работы скрипта. То есть, если какое-либо изменение произошло с временными метками, это изменение сохранится и будет отражаться в системе, даже если часовой пояс позже будет возвращен к исходному значению.

Заключение:

При работе с часами и датами в скриптах Groovy под JIRA необходимо учитывать возможные последствия изменения часового пояса во время выполнения скрипта и влияния этого изменения на глобальный стиль работы JVM. Рекомендуется использовать явные преобразования временных меток и избежать глобальных изменений часового пояса, чтобы предотвратить ошибочное отображение времени для пользователей.

Оцените материал
Добавить комментарий

Капча загружается...