gpt4 book ai didi

tsql - Quartz .Net - BigInt DateTime 的含义

转载 作者:行者123 更新时间:2023-12-04 00:08:18 27 4
gpt4 key购买 nike

我们使用 sql server 作为 Quartz.net 的持久化数据存储。我想写一些查询@时间值。具体来说 - Qrtz_Fired_Triggers.Fired_Time、Qrtz_Triggers.Next_fire_time、Prev_fire_time。

在我的一生中,我找不到任何能说明这些数据是什么的东西——滴答、毫秒、微秒、纳秒。我猜到了几件事,但都被证明是错误的。

最好的答案将包括将大整数转换为日期时间的数学运算,甚至可能是我应该找到的页面/文档的链接 - 解释这些字段中数据的含义。

如果您有关于使用 Quartz .Net 库查看此信息的具体说明,那将不胜感激,但是,我确实有两个目标 - 了解存储的日期/时间数据的含义并将其保留在 T-SQL 中。如果我得到一个,我可以弄清楚 T-SQL 或。

最佳答案

在 SQL 方面,您可以使用以下命令将 Quartz.NET BIGINT 时间转换为 UTC 时间的 DateTime:

SELECT CAST(NEXT_FIRE_TIME/864000000000.0 - 693595.0 AS DATETIME) FROM QRTZ_TRIGGERS

数字说明

列中存储的值是来自 .NET 的刻度数 DateTime.MinValue UTC 时间。每毫秒有 10000 个滴答声。
864000000000.0表示一天中的滴答数。你可以验证这一点
SELECT DATEDIFF(ms,'19000101','19000102')*10000.0

现在,如果我们取 2013 年 3 月 13 日午夜,.NET 返回 634987296000000000作为刻度数。
var ticks = new DateTime(2013, 3, 13).Ticks;

为了得到一个浮点数,其中整数代表天数,十进制数代表时间,我们取刻度并除以每天的刻度数(在我们的例子中给我们 734939.0)
SELECT 634987296000000000/(DATEDIFF(ms,'19000101','19000102')*10000.0)

如果我们将日期放入 SQL 并转换为浮点数,我们会得到一个不同的数字: 41344.0
SELECT CAST(CAST('March 13, 2013 0:00' AS DATETIME) AS FLOAT)

因此,我们需要为 .NET 到 SQL 的日子生成一个转换因子。 SQL 最小日期是 1900 年 1 月 1 日 0:00,因此可以通过获取该时间的滴答数 ( 599266080000000000 ) 并除以每天的滴答数来计算校正因子,得到 693595.0
SELECT 599266080000000000/(DATEDIFF(ms,'19000101','19000102')*10000.0)

因此,要计算 Quartz.NET 日期的 DateTime:
  • 取列
  • 中的值
  • 除以每天的滴答数
  • 减去修正系数
  • 转换为日期时间
  • SELECT CAST([Column]/864000000000.0 - 693595.0 AS DATETIME)

    关于tsql - Quartz .Net - BigInt DateTime 的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4225705/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com