quartz net 에서는 timestamp값을 0001-01-01 00:00:00 부터 Time Tick (TotalMiliSecond * 100)값을 저장합니다.

오라클에서 Tick값을 그대로 계산해서 보면 2일이 모자라게 나타납니다.

 

아래 쿼리로 확인하면 제대로 보입니다.

 

9/24 시간을 붙힌 이유는 대한민국 Timezone 시간을 덧 붙혀서 계산해야 제대로 보입니다.


select to_date('1970-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS') +
       (
          (LAST_CHECKIN_TIME - 621355968000000000 ) -- (now ticks - UNIX epoch in CLR ticks)
            /10000000 -- CLR ticks per second
        )/60/60/24 + 9/24 -- convert from seconds to days for date addition arithmetic
as date_from_ticks
from QRTZ_SCHEDULER_STATE;

 

 

아래처럼 해도 결과는 동일합니다.

SELECT to_date('0001-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS') +
       (LAST_CHECKIN_TIME / (10000000 * 60 * 60 * 24)) + 2 + (9/24)
as date_from_ticks
from QRTZ_SCHEDULER_STATE;

 

Time Tick값을 DateTime으로 변경

 

참고:

https://stackoverflow.com/questions/20052643/date-math-in-oracle-related-to-net-ticks

quartz에서는 db에 날짜 데이터를 0001년 부터 해서 milisecond 값을 bigint (int64)형태로 저장합니다.

 

mysql에서 직접 쿼리를 통해 이 값을 보기 쉬운 날짜 형태로 보기 위해서는 다소 여러 연산을 거쳐야 확인이 가능합니다.

 

아래 함수로 확인이 가능합니다.

 

 

SELECT CONVERT_TZ( FROM_DAYS(365+(FIRED_TIME / 864000000000))
   + INTERVAL (FIRED_TIME % 864000000000) / 10000000 SECOND , 'GMT', 'Asia/Seoul') AS FIRED  FROM QRTZ_FIRED_TRIGGERS;

 

표준시간대로 저장되기 때문에 정확하게 보려면 현재  TimeZone으로 계산까지 해야 확인이 됩니다.

 

 

참고 #1

https://stackoverflow.com/questions/34695247/mysql-script-to-convert-datetime-ticks-values-to-sql-date/34696553#34696553

 

참고 #2

https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_convert-tz

 

+ Recent posts