На стороне SQL вы можете преобразовать времена Quartz.NET BIGINT в DateTime в UTC времени с помощью:
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
Теперь, если мы примем 13 марта 2013 года в полночь, .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 - 1 января 1900 г., 0:00, поэтому поправочный коэффициент можно рассчитать, взяв число тиков за это время (599266080000000000
) и разделив его на тики в день, получив нам 693595.0
SELECT 599266080000000000/(DATEDIFF(ms,'19000101','19000102')*10000.0)
Итак, чтобы вычислить DateTime для даты Quartz.NET:
- возьмите значение в столбце
- , деленное на количество тиков в день
- вычесть поправочный коэффициент
- преобразовать в DATETIME
SELECT CAST([Column]/864000000000.0 - 693595.0 AS DATETIME)