【问题标题】:Skipped Jobs because of DST因夏令时而跳过工作
【发布时间】:2015-02-20 14:50:49
【问题描述】:

我必须在不使用任何第三方 API 的情况下使用 JDK1.4 使用 Java Timer 来安排一些作业。

如果 Daylight Saving Time (DST) 更改是从凌晨 2 点到凌晨 3 点,那么在 DST 转换时间(即凌晨 2 点和凌晨 3 点)之间安排的作业的预期行为应该是什么?

  1. 是否应该简单地忽略作业,因为时钟上永远不会出现凌晨 2 点到 3 点之间的时间
  2. 是否应该在凌晨 3 点立即运行。
  3. 任何其他预期行为?

我认为许多企业应用程序不能跳过这些工作。应该如何进行?

【问题讨论】:

    标签: java scheduled-tasks jobs dst timertask


    【解决方案1】:

    不要存储/运行/等。任何使用夏令时的东西。这……很难维护。

    UTC

    将数据库中的所有日期存储在UTC 中。以 UTC 执行所有时间计算。为所有业务流程维护单一标准不变的时间测量。只有在向用户显示结果(在屏幕上显示、在报告上打印等)时,您才会将时间本地化为用户期望的任何时间。

    基本上认为所有后端逻辑都是UTC,在接口级别,本地化时间和“系统”时间之间会有一种翻译层。

    【讨论】:

    • 要使用 UTC 并按照正确答案中的建议转换为时区,最好使用 Joda-Time 或 Java 8 中的 java.time 包。避免使用 java.util.Date/ .日历类。
    【解决方案2】:

    answer by David 是正确的。

    ScheduledExecutorService

    另外,我建议使用ScheduledExecutorService 而不是Timer。

    请务必阅读包含所有 JavaDoc 的内容。搜索 StackOverflow 以查找讨论和示例代码。具体来说,您必须捕获所有异常,否则服务将停止。

    【讨论】:

    • 感谢您的建议。但是我已经提到我必须使用 Java 1.4 并且 ScheduledExecutorService 从 1.5 开始可用。
    猜你喜欢
    • 2018-08-01
    • 2018-04-20
    • 2021-02-17
    • 2013-02-18
    • 2011-02-22
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多