1 Отредактировано hzl (2023-07-07 00:10:16)

Тема: преобразование timestamp в unix и наоборот

появилась необходимость работы со датой  в секундах в  формате Unix time. встроенных функций xbase++ и ads не обнаружил. Ниже две хранимых процедуры для перевода даты в unix и наоборот и примеры вызова.

CREATE FUNCTION COMMON.Unix 
   ( 
   time TIMESTAMP
   )
   RETURNS INTEGER
 BEGIN
 declare rTIME integer;
declare @startdate TIMESTAMP;
SET @startdate = '1970-01-01 00:00:00';
rtime = TIMESTAMPDIFF(SQL_TSI_SECOND, @startdate,time);
return rtime;


END;

CREATE FUNCTION COMMON.Unix2Time 
   ( 
   unix INTEGER
   )
   RETURNS TIMESTAMP
 BEGIN
 declare rDate timestamp;
declare startdate TIMESTAMP;
SET startdate = '1970-01-01 00:00:00';
rdate = TIMESTAMPADD(SQL_TSI_SECOND,unix,startdate);
return rdate;


END;

1. Примеры вызова в рамках sql запроса
select common.unix('2023-12-31 22:36:36') FROM system.iota;
select common.unix2time(1704062196) FROM system.iota;

2. Примеры вызова в рамках макроса

local oFEVSQL1 
local cQuery := ""
local aReturn99 :=""
  oFEVSQL1 := SpSql():New(DirCommon):create()
  cQuery += "SELECT COMMON.unix2time ("
  cQuery += "1704062196"       
  cQuery +=  ") as dep from system.iota"       
  oFEVSQL1:ExecuteDirect(cQuery,,)
  aReturn99:= oFEVSQL1:dataArea:dep 
oFEVSQL1:destroy()
monitor(aReturn99 )
return


local oFEVSQL1 
local cQuery := ""
local aReturn99 :=""
  oFEVSQL1 := SpSql():New(DirCommon):create()
  cQuery += "SELECT COMMON.unix ("
  cQuery += "'2023-12-31 22:36:36'"       
  cQuery +=  ") as dep from system.iota"       
  oFEVSQL1:ExecuteDirect(cQuery,,)
  aReturn99:= oFEVSQL1:dataArea:dep   
oFEVSQL1:destroy()
monitor(aReturn99 )
return

2

Re: преобразование timestamp в unix и наоборот

як на мене, то назви функцій мають бути очевиднішими, перша наприклад time2unix (для одноманітності з оберненою другою)