【发布时间】:2016-10-20 11:27:31
【问题描述】:
我有一个关于 java 中区域的问题。 当用户可以设置时区和一些时间表时,我有一个用户案例。例如,在时区 America/Los_Angeles 的周一和周日晚上 11 点运行任务。 如果我的服务器时区是 UTC+0:00,我会遇到如何正确检测星期几和新时间的问题(大约是周二和周一早上 6 点)。所以我的问题是如何根据服务器时区和用户时区正确运行用户任务。
更新
我有一个 cron 表达式,我在其中设置小时、分钟和星期几。 当用户创建新任务时,他可以设置自定义时区(例如在星期一晚上 11 点使用自定义时区 UTC-7:00 运行任务) 因此,如果我的理解是正确的,我需要将他的时间设置(晚上 11 点)转换为相应的服务器时间。因此,如果我的服务器时区是 UTC+3:00,我需要将晚上 11 点转换为上午 9 点,并且在我的服务器上不是星期一(而是星期二)。然后,如果我将在周二上午 9 点运行 cron,它将看起来像任务在周一晚上 11 点运行。我的方法正确吗?我希望你能理解我的问题。提前致谢。
【问题讨论】:
-
你能告诉我们问题是什么吗?你能告诉我们你的代码吗?系统时钟始终为 UTC,因此没有理由一定会出现问题。
-
@PeterLawrey 我编辑了我的问题
-
您必须一起转换时间和星期几。请注意夏令时,您不能只计算一次并假设这总是正确的。您必须计算下一次并添加要在该时间运行的任务。例如如果他们在纽约选择凌晨 1 点,这将是一年中不同时间的 21:00 UTC-4 和 20:00 UTC-5。