预定任务 – 在秋季时间更改期间的预定作业
我想知道其他人如何处理这种情况.
如果你的工作计划在凌晨1:30运行怎么办?在秋天,当时间变化时,1:00:00到1:59:59的小时会重复,因此工作会跑两次. 可以是Windows任务计划程序,SQL代理或任何其他计划工具.大多数这些工具似乎都基于机器时间,而不是UTC时间.如果我告诉它每晚在UTC时间运行工作,那么我就不会有重复的小时问题. 解决方法考虑到时区和夏令时,在当地时间对未来任务进行适当的安排是一个非常复杂的主题.我之前从Stack Overflow here和 here的编程角度写过这篇文章.我将从非编程的角度总结: >按当地时间定义您的重复发生模式 – 而不是UTC.例如,如果您设置每日闹钟以在每天上午8:00唤醒您,则您不希望在夏令时转换后提前一小时或一小时后唤醒.如果我在美国太平洋时区,我无法安排在UTC时间下午4:00,因为在转换后,它必须切换到UTC时间下午3:00,以保持当地时间早上8:00. >您几乎总是会在下一次发生这种情况时执行此操作,以便您可以使用UTC时钟来确定实际运行时间. >制定适当的策略(固定或可配置),以及在daylight saving time转换时发生的事件: >对于“春季前进”过渡,当事件可能不存在时,缺少当地时间.例如,在美国太平洋时间,计划在当地时间凌晨2:00运行的每日任务将不会在2014年3月9日存在.在大多数情况下,您需要将该时间提前保存金额(通常为1小时) ),那天它将在凌晨3点运行,但在下一个实例中将在凌晨2点恢复运行. (但是,你完全有可能想要一个不同的策略.) >如果您需要更新时区数据,请准备重新计算所有出现的UTC时间. IANA/Olson TZDB每年都会发布多个更新,因为世界各国政府一直在改变他们关于时区偏移和夏令时规则的想法.您不能在将来的任何特定持续时间内假设规则不会更改. >确保subscribe for announcements时区数据发布,并有一个将它们应用于您的系统和/或应用程序的过程. >通过所有这些理解,仍然存在一种情况,您只能按UTC计划,这是针对ABSOLUTE的未来事件.例子: >每X小时或每X分钟运行一次的工作. Windows任务计划程序 Windows不一定做正确的事情.注意你如何定义触发器: 当您选中标记为“跨时区同步”的框时,该任务仅按UTC计划. (所有时间仍然显示为本地时间,但存储为UTC.)因此,这是我之前称为“绝对”事件. 当您取消选中该框时,它将使用运行代码的计算机的本地时区.它没有给你任何指定时区的选项,所以这不是一个很好的实现恕我直言. 我不完全确定它是DST行为,但我会试验并回复你.它可能完成我上面描述的,但不一定. SQL代理 SQL Agent调度程序更糟糕,因为它只允许您使用本地服务器时间.同样,不能指定时区,也不能指定UTC. 它已经是requested,但不被接受. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |