Quartz 的SB问题 GetNextValidTimeAfter 输出和输出 时区 不同步,好傻的方法?
測(cè)試代碼如下
?
DateTime?kk?=?new?DateTime(2012,?6,?4,?15,?0,?0);????????????Quartz.CronExpression?cron?=?new?Quartz.CronExpression("0?14?15???*?*");
????????????var?dt?=?cron.GetNextValidTimeAfter(kk);
好傻好傷。
dt的時(shí)候是?
{2012/6/5 7:14:00} 跑出了一個(gè)7點(diǎn)來(lái)了。正確的期待值應(yīng)該是? 2012-6-4 15:14:00:00
?
查了一下它的方法。還有一個(gè)方法 GetNextInvalidTimeAfter
?
var?dtInvalid?=?cron.GetNextInvalidTimeAfter(kk);?
跟我們的期待值完全一樣。不明白原來(lái)寫(xiě)的人為什么會(huì)這么用啊。
?
又試了下。?
DateTime?currenTime2?=?new?DateTime(2012,?6,?5,?15,?15,?0);
????????????Quartz.CronExpression?cron?=?new?Quartz.CronExpression("0?14?15???*?*");
?????????
????????????var?dt2?=?cron.GetNextValidTimeAfter(currenTime2);
????????????var dt3 =?cron.GetNextInvalidTimeAfter(currenTime2);
?
?發(fā)現(xiàn)
dt2 是{2012/6/6 7:14:00} // local time后是 2012/6/6 15:14:00:00正確了。 6月5號(hào)的觸發(fā)時(shí)間已過(guò)了。 所以時(shí)間應(yīng)該是 6-6正確。
dt3 是{2012/6/5 15:15:00} //不對(duì) 原來(lái) GetNextInvalidTimeAfter? 是不行的。
?
?
升級(jí)到 最新的版本后 2.0.1.100上面的問(wèn)題被解決了。但是發(fā)現(xiàn)了一個(gè)新問(wèn)題。
我們的系統(tǒng)比如說(shuō)相間隔7個(gè)小時(shí)觸發(fā)。 然后我寫(xiě)出來(lái)的cronstring 是?
0 0 */7 * * ? *但是發(fā)現(xiàn)這個(gè)不是表示間隔 7個(gè)小時(shí)觸發(fā),而是表示。從0:00:00 開(kāi)始每7個(gè)小時(shí)觸 發(fā)一次。 上面的表達(dá)式等價(jià)于
0 0 0/7 * * ? *
如果它可以讓 * 號(hào)表示任意小時(shí)的話(huà)就cool了。
需要自己去修改源代碼才可以達(dá)到這種效果了。 其實(shí)Repeat 這種代碼不要用CronString寫(xiě)出來(lái)還可以更簡(jiǎn)單。每隔幾個(gè)小時(shí) 幾天 幾周 直接就可以算出TimeSpan 然后可以很輕松的等到NextValidTime.
而CronString用在 每天的哪一個(gè)小時(shí)觸發(fā)。每周的周一 周二 每月的第一天 或者最后一天。這種才更合適于它。
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Quartz 的SB问题 GetNextValidTimeAfter 输出和输出 时区 不同步,好傻的方法?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SQL内置函数日期函数
- 下一篇: 无线传感器网络(一)基于无锚节点的WSN