Вопрос или проблема
Описание существующей среды:
Существует облачный экземпляр JIRA, работающий по всему миру на нескольких узлах.
JIRA поддерживает Groovy скрипты.
Один из скриптов используется для проверки и установки значений определённых пользовательских полей при создании новых задач JIRA и переходах задач через рабочий процесс JIRA.
Некоторые из затронутых пользовательских полей представляют дату и время (например, “Срок выполнения”, “Исправлено на” и т.д.), соответственно скрипт должен иметь возможность обрабатывать их.
Внутри скрипта – перед выполнением основных операций – временная зона временно устанавливается на UTC (для получения “предопределённой” временной зоны и формата даты и времени):
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Примечание: временная зона устанавливается не для вошедшего в систему пользователя, а “в общем”, как описано выше.
Вопросы:
- Каков объем изменения временной зоны при таком вызове?
- Может ли такой вызов повлиять на то, как пользователи JIRA видят значения даты и времени в JIRA?
- Если какая-либо задача JIRA, не обработанная скриптом, была добавлена или изменена во время выполнения скрипта, когда временная зона была изменена – повлияет ли это на значения этой задачи (например, когда скрипт вернет временную зону к первоначальному значению)?
Документация Groovy не указывает объем изменения.
Документация JAVA сообщает, что изменение затрагивает “виртуальную машину Java“.
Как это реализуется в скрипте Groovy, работающем с экземпляром JIRA? Изменит ли это стандартную временную зону только для виртуального пространства скрипта, или для всех скриптов Groovy на этом узле, или также для текущего узла с экземпляром JIRA, или даже для всех узлов?
Ответ или решение
Ответ на вопрос о пределах изменения часового пояса с помощью вызова TimeZone.setDefault(…)
Описание среды:
В данном случае, у нас есть экземпляр JIRA в облаке, который работает по всему миру на нескольких узлах. JIRA поддерживает скрипты на Groovy, и один из таких скриптов используется для проверки и установки значений в определенные пользовательские поля при создании новых задач и их переходе через рабочий процесс.
Пределы изменения часового пояса:
-
Каков масштаб изменения часового пояса с помощью вызова TimeZone.setDefault()?
ВызовTimeZone.setDefault(TimeZone.getTimeZone("UTC"));
будет изменять значение часового пояса для всей виртуальной машины Java (JVM), в которой исполняется скрипт Groovy. Это означает, что после выполнения этого вызова все операции с датой и временем в текущей JVM будут использовать установленный часовой пояс по умолчанию (в данном случае UTC). -
Может ли этот вызов повлиять на то, как пользователи JIRA видят значения даты и времени в JIRA?
Да, такой вызов может оказать влияние на отображение значений даты и времени для пользователей JIRA, если в процессе выполнения сценария или в зависимости от системы логики JIRA используется настраиваемый часовой пояс, который отличается от установленного по умолчанию. Однако следует отметить, что большинство пользовательских интерфейсов в JIRA обычно основываются на личных настройках часового пояса пользователей, и менять отображение времени на уровне самого JIRA не следует. - Если во время выполнения скрипта будет добавлен или изменен JIRA-вопрос, и изменится часовой пояс, повлияет ли это на значения этого вопроса (например, когда скрипт вернет часовой пояс обратно на оригинальное значение)?
Время, установленное в задачах JIRA, обычно может храниться в формате UTC в базе данных или в локальном часовом поясе. При манипуляциях через сценарий, если часы будут изменены на другой часовой пояс после выполнения скрипта или до его завершения, может возникнуть несоответствие между временными метками в базе данных и часовым поясом, установленным для текущей сессии. Если скрипт изменяет часовой пояс обратно к начальному значению после его выполнения, это не вернёт значения, которые были уже зафиксированы во время работы скрипта. То есть, если какое-либо изменение произошло с временными метками, это изменение сохранится и будет отражаться в системе, даже если часовой пояс позже будет возвращен к исходному значению.
Заключение:
При работе с часами и датами в скриптах Groovy под JIRA необходимо учитывать возможные последствия изменения часового пояса во время выполнения скрипта и влияния этого изменения на глобальный стиль работы JVM. Рекомендуется использовать явные преобразования временных меток и избежать глобальных изменений часового пояса, чтобы предотвратить ошибочное отображение времени для пользователей.