我们使用sql server作为Quartz.net的持久数据存储.我想写一些查询@the Time值的查询.具体来说 - Qrtz_Fired_Triggers.Fired_Time,Qrtz_Triggers.Next_fire_time,Prev_fire_time.
对于我的生活,我找不到任何说明这些数据的东西 - 刻度,毫秒,微秒,纳秒.我已经猜到了几件事,但他们都被证明是错的.
最好的答案包括将大型int转换为日期时间的数学,甚至可能是我应该找到的页面/文档的链接 - 解释这些字段中数据的含义.
如果您有关于使用Quartz .Net库查看此信息的具体说明,那么我将非常感激,但是,我确实有2个目标 - 了解存储日期/时间数据的含义并将其保存在T-SQL中.如果我得到了那个,我可以找出T-SQL或者出来.
sal*_*uce 27
在SQL端,您可以使用以下内容将Quartz.NET BIGINT时间转换为UTC时间的DateTime:
SELECT CAST(NEXT_FIRE_TIME/864000000000.0 - 693595.0 AS DATETIME) FROM QRTZ_TRIGGERS
Run Code Online (Sandbox Code Playgroud)
存储在列中的值是DateTime.MinValue
UTC时间内.NET的刻度数.每毫秒有10000个刻度.
该864000000000.0
代表蜱的单日数量.你可以用这个验证
SELECT DATEDIFF(ms,'19000101','19000102')*10000.0
Run Code Online (Sandbox Code Playgroud)
现在,如果我们在2013年3月13日午夜时分,则返回.NET 634987296000000000
作为滴答数.
var ticks = new DateTime(2013, 3, 13).Ticks;
Run Code Online (Sandbox Code Playgroud)
要获得一个浮点数,其中整数表示天数,十进制数表示时间,我们采用刻度并除以每天的刻度数(734939.0
在我们的示例中给出)
SELECT 634987296000000000/(DATEDIFF(ms,'19000101','19000102')*10000.0)
Run Code Online (Sandbox Code Playgroud)
如果我们将日期放在SQL中并转换为float,我们会得到一个不同的数字: 41344.0
SELECT CAST(CAST('March 13, 2013 0:00' AS DATETIME) AS FLOAT)
Run Code Online (Sandbox Code Playgroud)
因此,我们需要为.NET-to-SQL天生成转换因子.SQL最小日期是1900年1月1日0:00,因此可以通过获取该时间599266080000000000
的刻度数()并除以每天的刻度来计算修正系数,给出我们693595.0
SELECT 599266080000000000/(DATEDIFF(ms,'19000101','19000102')*10000.0)
Run Code Online (Sandbox Code Playgroud)
因此,要计算Quartz.NET日期的DateTime:
SELECT CAST([Column]/864000000000.0 - 693595.0 AS DATETIME)
Run Code Online (Sandbox Code Playgroud)
数据库中存储的值是 DateTime.Ticks 值。来自 MSDN:
一个刻度代表一百纳秒或百万分之一秒。一毫秒有 10,000 个刻度。
此属性的值表示自 0001 年 1 月 1 日午夜 12:00:00 以来经过的 100 纳秒间隔数,它表示 DateTime.MinValue。它不包括归因于闰秒的刻度数。
归档时间: |
|
查看次数: |
10730 次 |
最近记录: |