Groovy:调用 TimeZone.setDefault(...) 时区更改的范围是什么

问题描述 投票:0回答:1

现有环境描述: 有一个 JIRA 云实例在全球多个节点上运行。 JIRA 支持 Groovy 脚本。 在通过 JIRA 工作流创建新的 JIRA 问题和问题转换期间,使用一个脚本检查和设置某些自定义字段的值。 一些受影响的自定义字段表示日期时间(例如“截止日期”、“固定日期”等),相应地脚本应该能够处理它们。

在脚本内部 - 在执行主要操作之前 - 时区暂时设置为 UTC(以获取“预定义”时区和日期时间格式):

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

注意: 时区设置不是针对登录用户,而是“一般”,如上所述。

问题:

  1. 此类调用改变时区的范围是什么?
  2. 此类调用会影响 JIRA 用户如何查看 JIRA 中的日期时间值吗?
  3. 如果脚本期间添加或修改的某些未由脚本处理的 JIRA-Issue 已更改时区 - 是否会影响此问题的值(例如,脚本何时将时区恢复为原始值)?

Groovy 文档没有指定更改的范围。 JAVA 文档 表明该更改会影响“Java 虚拟机”。

它是如何通过与 JIRA-instance 一起运行的 Groovy 脚本构建的?它会仅更改脚本虚拟空间的默认时区,还是更改此节点上所有 Groovy 脚本的默认时区,还是更改带有 JIRA 实例的当前节点的默认时区,甚至更改所有节点的默认时区?

groovy timezone jira
1个回答
0
投票

当配置中存在 Jira 的全球使用时,如果您以某种方式进行时间计算,则这种时区配置对于正在运行的脚本来说是可接受且正确的。 这样想吧:

  • 用户 A 位于 UTC+3 的某个地方
  • 用户 B 位于 UTC+1 的某个地方

假设我想向两个用户发送一封邮件,告知任务将在某个截止日期到期,假设今天 15:00 (UTC)。

假设我的 Jira 环境位于 UTC+1。

如果我直接说“这将在 15:00 结束”而没有时区,如果用户 A 认为这是当地时间,他/她可能会错过这个截止日期。

所以,我得到了这样的日期,这样我就可以将用户发送到他们的本地日期。

或者,在另一种情况下,我可能会从用户那里获得一些小时信息,并且他正在当地时间输入该信息。因此,我可能想将其转换为 UTC(或任何所需的时区)以概括此过程。

用例有很多变体,我只指出了其中两个。

所以,如果您了解了这种方法背后的想法,让我们回答您的问题:

  1. 此时区更改仅影响进程。您正在运行 Groovy 代码,它是一个进程,该进程的时区就是该值。因此,如果您使用任何日期操作而不指定时区,则默认值为 UTC。
  2. 不。因为 Jira 有一些常规时区信息(您可以检查“高级设置”上的“系统信息”选项卡),并且用户会看到时间取决于该时区。 Groovy 脚本对此没有影响。
  3. 不,取决于脚本的细节。假设我在 Jira 中的时区是 UTC+1。我得到的时间是 UTC+1 的 13:00。这意味着现在是 12:00 UTC。我在该运行时间上添加了 2 小时,即 14:00 UTC。当我在 Jira 上更新它时,如果我用当前时区信息(UTC)进行操作,没有问题,它将是 15:00 UTC+1,这是正确的。
© www.soinside.com 2019 - 2024. All rights reserved.