Quartz 的SB问题 GetNextValidTimeAfter 输出和输出 时区 不同步,好傻的方法?

测试代码如下

 

DateTime kk = new DateTime(2012641500);
            Quartz.CronExpression cron = new Quartz.CronExpression("0 14 15 ? * *");
            var dt = cron.GetNextValidTimeAfter(kk);

好傻好伤。

dt的时候是 

{2012/6/5 7:14:00} 跑出了一个7点来了。

正确的期待值应该是  2012-6-4 15:14:00:00

后面才想到这个时间跟好跟我们差8个小时。(没有去验证它的代码是否真的是这个问题)
后面用了
dt.Value.ToLocalTime();
得到的时间是 {2012/6/5 15:14:00} 跟我们期待值差一天。

 

查了一下它的方法。还有一个方法 GetNextInvalidTimeAfter

 

var dtInvalid = cron.GetNextInvalidTimeAfter(kk);

 


得到的时间是
2012-6-4 15:14:00:00

跟我们的期待值完全一样。不明白原来写的人为什么会这么用啊。

 

又试了下。 


DateTime currenTime2 = new DateTime(20126515150);
            Quartz.CronExpression cron = new Quartz.CronExpression("0 14 15 ? * *");
         
            var dt2 = cron.GetNextValidTimeAfter(currenTime2);
            var dt3 = cron.GetNextInvalidTimeAfter(currenTime2);

 

 发现
dt2 是{2012/6/6 7:14:00} // local time后是 2012/6/6 15:14:00:00正确了。 6月5号的触发时间已过了。 所以时间应该是 6-6正确。

dt3 是{2012/6/5 15:15:00} //不对 原来 GetNextInvalidTimeAfter  是不行的。

 

 

升级到 最新的版本后 2.0.1.100上面的问题被解决了。但是发现了一个新问题。

我们的系统比如说相间隔7个小时触发。 然后我写出来的cronstring 是 

0 0 */7 * * ? *
但是发现这个不是表示间隔 7个小时触发,而是表示。从0:00:00 开始每7个小时触 发一次。 上面的表达式等价于
0 0 0/7 * * ? *
如果它可以让 * 号表示任意小时的话就cool了。

需要自己去修改源代码才可以达到这种效果了。 其实Repeat 这种代码不要用CronString写出来还可以更简单。每隔几个小时 几天 几周 直接就可以算出TimeSpan 然后可以很轻松的等到NextValidTime.

而CronString用在 每天的哪一个小时触发。每周的周一 周二 每月的第一天 或者最后一天。这种才更合适于它。

 

 

 


 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之switch控件的用法

在做一个蓝牙开关时候,用到了switch,记一下用法,其实跟Button是几乎一样的. 布局中: <Switch android:id="@+id/open" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textOff="蓝牙关闭中&q…

pythonresponse对象的属性_Scrapy中response属性以及内容提取

PythonPython开发Python语言Scrapy中response属性以及内容提取一.属性url &#xff1a;HTTP响应的url地址,str类型status&#xff1a;HTTP响应的状态码, int类型headers &#xff1a;HTTP响应的头部, 类字典类型, 可以调用get或者getlist方法对其进行访问body&#xff1a;HTTP响…

【转】学习apicloud和IOS之间的模块化使用

最近公司有使用APICloud发开的需求&#xff0c;需要我这边提供一些模块包得封装。因为没有也是刚接触APICloud&#xff0c;所以也就在看官方文档 。下面讲一讲我再使用过程中得一点点东西。 首先&#xff0c;下载官方SDK,下载最新版本的模块开发SDK&#xff0c;找到里面的Modul…

豪横!学术圈“造假之王”,200余篇论文有183篇论文被撤稿

全世界只有3.14 % 的人关注了爆炸吧知识导读&#xff1a;学术造假已经不再是什么新鲜话题&#xff0c;历史上的学术骗子也是数不胜数。其中骗子之王更是达到前无古人的地步&#xff0c;发表论文数212篇&#xff0c;因涉嫌造假而遭到撤稿的就达到了183篇之多。然而打假的过程并不…

在CISCO ASA 防火墙上配置Web ×××

目前市场上产品很多&#xff0c;而且技术各异&#xff0c;就比如传统的 IPSec 来讲&#xff0c; SSL 能让公司实现更多远程用户在不同地点接入&#xff0c;实现更多网络资源访问&#xff0c;且对客户端设备要求低&#xff0c;因而降低了配置和运行支撑成本。很多企业用户采纳 …

学Dapr Actors 看这篇就够了

介绍Actor模式将Actor描述为最低级别的“计算单元”。换句话说&#xff0c;您在一个独立的单元&#xff08;称为actor&#xff09;中编写代码&#xff0c;该单元接收消息并一次处理一个消息&#xff0c;没有任何并发或线程。再换句话说&#xff0c;根据ActorId划分独立计算单元…

博客园2013年5月份第1周源码发布详情

媒体互动学习社区(课程设计)源码 2013-5-10 [VS2010]源码描述&#xff1a;该源码使用VS210SQL08开发&#xff0c;主要分为前台和后台&#xff0c;所有提交使用JQFORM提交&#xff0c;实现无刷新提高用户的体验&#xff0c;前台功能有学科的介绍&#xff0c;课件跟视频下载&…

git之Pushing to the remote branch is not fast-forward错误解决

今天推送代码的时候报错了这个Pushing to the remote branch is not fast-forward,so the push has to be forced.The commits in the remote branch will be lost 错误&#xff0c;然后就出现这个效果&#xff0c;下面是图片。 问题&#xff08;Non-fast-forward&#xff09;的…

tp mysql索引_mysql索引

1 查看表中已存在哪些索引&#xff1a;show index from 表名&#xff1b;在添加索引之前最好先查看一下该表中已存在哪些索引&#xff1a;show index from 表名&#xff1b;1、主键索引注意&#xff1a; 主键索引一张表中只能有一个&#xff0c;但是可以添加多个索引 比如&…

CSS Id 和 Class

2019独角兽企业重金招聘Python工程师标准>>> id 和 class 选择器 如果你要在HTML元素中设置CSS样式&#xff0c;你需要在元素中设置"id" 和 "class"选择器。 id 选择器 id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。 HTML元素以id属…

这4部有生之年必看的“教材级”纪录片,免费领取!

全世界只有3.14 % 的人关注了爆炸吧知识纪录片是以真实生活为创作素材&#xff0c;以真人真事为表现对象&#xff0c;并对其进行艺术的加工与展现的&#xff0c;以展现真实为本质&#xff0c;并用真实引发人们思考的电影或电视艺术形式。好的纪录片就像打开了一扇新世界的大门&…

Dapr 集成 APISIX 做API网关

在这篇文章中&#xff0c;我将展示如何创建一个 APISIX控制器&#xff0c;该控制器在 Kubernetes 集群中公开启用 Dapr 的应用程序。本质上&#xff0c;APISIX控制器将配置相同的标准 Dapr annotations以注入daprd sidecar。通过公开这个 sidecar&#xff0c;它将允许外部应用程…

判断一个字符串是否包含另一个字符串(用java但是不能用index()这个函数)

目录: 一.方法介绍 二.图示意 三.源代码 一.方法介绍 判断一个字符串str1是否包含另一个字符串str2: 1.取str2的第一个字符一次和str1的字符依次比较,知道找到相等的字符为止或者找完整个str1的length. 2.当找到相等的字符后,在str2长度内str2与str1依次进行比较 二…

mysql添加字段时定义候选键_MySQL 表约束

约束概述对数据表中数据的限制条件叫表的约束&#xff0c;目的是为了保证表中记录的完整和有效。例如非空、唯一等。查看约束1 通过查看建表语句 查看表中的约束show create table tb_name;2 通过检查约束表 查看约束select * from information_schema.table_constraints where…

跳槽9招让你“空降”任何企业都能成功

2019独角兽企业重金招聘Python工程师标准>>> 作为一名职业经理人&#xff0c;没有谁没跳过槽&#xff0c;撇开在跳槽时对所“空降”的企业所需要的行业知识知根知底而“得心应手”&#xff0c;从而“稳定”外&#xff0c;其他人可能或多或少都有过因“不适应”新单位…

这个年纪,喜欢你的肉体还会送你包的,原来是......

1 iPhone 12一出王守义成最大赢家&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 想搭免费车的喵&#xff08;dy&#xff1a;大兔几&#xff09;▼3 拼纹身的有吗&#xff1f;纹在我身&#xff0c;刀在你身▼4 那你泡啥&#xff1f;▼5 快把知识君p上去&#xff…

Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)

Response. AppendHeader使用大全文件下载&#xff0c;指定默认名 Response.AddHeader(”content-type”,”application/x-msdownload”); Response.AddHeader(”Content-Disposition”,”attachment;filename要下载的文件名.rar”); 刷新页面 Response.AddHeader “REFRESH”, …

C# WPF MVVM模式Caliburn.Micro框架下事件发布与订阅

01—前言处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信&#xff0c;Caliburn提供了一种事件机制&#xff0c;可以在应用程序中低耦合的模块之间进行通信&#xff0c;该机制基于事件聚合器服务&#xff0c;允许发布者和订阅者之间通过事件进行通讯&#xff0c;且彼…

mysql触发器 node_node.js中事件触发器events的使用

node.js是基于事件驱动的&#xff0c;通过events&#xff0c;我们可以方便的创建事件&#xff0c;并通过触发事件来调用我们自定义的监听函数。所有能触发事件的对象都应该是 EventEmitter 类的实例&#xff0c;一般我们自定义一个类继承于 EventEmitter 类。通过on()方法我们可…

Android之UI线程与子线程交互设计的5种方法

转载地址:http://www.cr173.com/html/19165_1.html 在android的设计思想中,为了确保用户顺滑的操作体验。一些耗时的任务不能够在UI线程中运行,像访问网络就属于这类任务。因此我们必须要重新开启一个后台线程运行这些任务。然而,往往这些任务最终又会直接或者间接的需要访…