Quartz 的SB问题 GetNextValidTimeAfter 输出和输出 时区 不同步,好傻的方法?
測試代碼如下
?
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的時候是?
{2012/6/5 7:14:00} 跑出了一個7點來了。正確的期待值應(yīng)該是? 2012-6-4 15:14:00:00
?
查了一下它的方法。還有一個方法 GetNextInvalidTimeAfter
?
var?dtInvalid?=?cron.GetNextInvalidTimeAfter(kk);?
跟我們的期待值完全一樣。不明白原來寫的人為什么會這么用啊。
?
又試了下。?
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號的觸發(fā)時間已過了。 所以時間應(yīng)該是 6-6正確。
dt3 是{2012/6/5 15:15:00} //不對 原來 GetNextInvalidTimeAfter? 是不行的。
?
?
升級到 最新的版本后 2.0.1.100上面的問題被解決了。但是發(fā)現(xiàn)了一個新問題。
我們的系統(tǒng)比如說相間隔7個小時觸發(fā)。 然后我寫出來的cronstring 是?
0 0 */7 * * ? *但是發(fā)現(xiàn)這個不是表示間隔 7個小時觸發(fā),而是表示。從0:00:00 開始每7個小時觸 發(fā)一次。 上面的表達式等價于
0 0 0/7 * * ? *
如果它可以讓 * 號表示任意小時的話就cool了。
需要自己去修改源代碼才可以達到這種效果了。 其實Repeat 這種代碼不要用CronString寫出來還可以更簡單。每隔幾個小時 幾天 幾周 直接就可以算出TimeSpan 然后可以很輕松的等到NextValidTime.
而CronString用在 每天的哪一個小時觸發(fā)。每周的周一 周二 每月的第一天 或者最后一天。這種才更合適于它。
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Quartz 的SB问题 GetNextValidTimeAfter 输出和输出 时区 不同步,好傻的方法?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL内置函数日期函数
- 下一篇: 在CISCO ASA 防火墙上配置Web