【发布时间】:2016-02-02 22:37:42
【问题描述】:
我有一些计时器可以从表格中读取HH:MM:SS,以确定每天何时运行。
例如:
定时器 A 需要在每周一 13:00:00 运行
定时器 B 需要在每周二 02:00:00 运行
定时器 C 需要每小时运行一次
所以在我的代码中,我计算出当前时间是多少,然后计算从DateTime.Now() 到下一次计时器应该运行的毫秒数。当计时器的Elapsed 事件完成时,它会重新计算下一次应该运行的时间。由于时间变化,这在本周末造成了一个问题。
有没有更好的方法来做到这一点? DateTime.UtcNow 会是更好的选择吗?也许将数据库中的时间字符串转换为UTC时间,然后找出DateTime.UtcNow()而不是DateTime.Now()之间的区别?
【问题讨论】:
-
是的,UTC,但为什么您的日期或时间被存储为字符串而不是数据库中的日期?
-
但是,你现在的想法是什么。当您以 UTC 存储时间时,在 DST 上您将有另一个运行时间。这个主题有很多可用的信息,起点是野田时间的创建者的 Hanselminutes 播客:hanselminutes.com/485/…。但codeofmatt.com/2015/03/06/… 也提供了很多信息。
-
首先,您需要一个规范。一个好。一种准确涵盖代码在各种情况下的行为方式,包括更改为 DST 或从 DST 更改。如果您切换到 UTC,那么您提供的任何示例都不会受到更改的影响。所以这是一种选择。但是需要每隔一小时运行一次的计时器呢?还是需要每天凌晨 2 点或周日凌晨 2 点运行的计时器?等等。如前所述,您的问题过于宽泛,尤其是因为您甚至没有完全指定所需的行为。
-
将 Quartz.NET 用于您的触发器是一个想法吗?
-
你为什么要谈论计时器?计时器是短暂的。它们不适用于安排活动数小时或数天。这只是您的措辞,还是您实际上是在尝试使用
System.Timers.Timer来标记问题?
标签: c# date datetime timezone system.timers.timer