0

两个 Goldmine 表 CONTTLOG 和 GMTLOG 旨在用于 GoldSync 功能,但是我将能够使用这些表来调查和报告哪个用户以及何时进行了更改。

为了知道什么时候我需要知道 LOGSTAMP 字段中用于表示日期和时间的格式。

在这里问过同样的问题:https ://forums.ivanti.com/s/question/0D54O00007Kfh7MSAR/what-is-the-format-used-to-represent-date-and-time-in-the-logstamp-field

4

1 回答 1

0

问题在论坛中得到解答:

https://forums.ivanti.com/s/question/0D54O00007Kfh7MSAR/what-is-the-format-used-to-represent-date-and-time-in-the-logstamp-field?language=en_US

简而言之,syncstamp/logstamp 是一个基数为 36 的数字,除以 50 时,您可以得到自 1990 年 1 月 1 日午夜以来的秒数。

过去发布了一些 SQL 函数,它们可以成功地导航创建/解密它们的数学运算。

这是一组,我想,Pat Connelly:

创建函数 dbo.f_GMSyncStampFromDate

(@datetime 日期时间)

返回 VARCHAR(7)

作为

开始

声明@p1 bigint 设置@p1 = 36

声明 @p2 bigint 设置 @p2 = @p1 * @p1

声明 @p3 bigint 设置 @p3 = @p2 * @p1

声明 @p4 bigint 设置 @p4 = @p3 * @p1

声明 @p5 bigint 设置 @p5 = @p4 * @p1

声明 @p6 bigint 设置 @p6 = @p5 * @p1

声明 @p7 bigint 设置 @p7 = @p6 * @p1

声明@digits char(36)

设置@digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'

声明@gmstamp varchar(7) 设置@gmstamp = ''

-- 获取GoldMine时间开始以来的时间序列。

声明@s bigint

设置@s=datediff(秒,'1990-01-01T00:00:00.000',@datetime)*50.0

如果 (@s / @p7)> 0 返回 ''

-- 构建基数为 36 的数字字符串。

选择@gmstamp = @gmstamp + substring(@digits,1+(@s / @p6),1) 设置@s=@s%@p6

选择@gmstamp = @gmstamp + substring(@digits,1+(@s / @p5),1) 设置@s=@s%@p5

选择@gmstamp = @gmstamp + substring(@digits,1+(@s / @p4),1) 设置@s=@s%@p4

选择@gmstamp = @gmstamp + substring(@digits,1+(@s / @p3),1) 设置@s=@s%@p3

选择@gmstamp = @gmstamp + substring(@digits,1+(@s / @p2),1) 设置@s=@s%@p2

选择@gmstamp = @gmstamp + substring(@digits,1+(@s / @p1),1) 设置@s=@s%@p1

选择@gmstamp = @gmstamp + 子字符串(@digits,1+(@s),1)

-- 删除前导零。

而(左(@gmstamp,1)='0')

开始

if (Len(@gmstamp) > 1) 设置 @gmstamp = substring(@gmstamp, 2,len(@gmstamp))

结尾

返回@gmstamp

- 考验我

-- 选择 dbo.f_GMSyncStampFromDate(current_timestamp)

结尾

创建函数syncstamper(@timestamp char(7))

返回日期时间

作为

开始

--此公式将 Goldmine 日志戳或同步戳转换为真实的日期时间值。返回值为

-- 标记的 GMT 时间,而不是区域或夏令时调整时间。

--定义所有需要的变量

声明@ts1 char(1)

声明@ts2 char(1)

声明@ts3 char(1)

声明@ts4 char(1)

声明@ts5 char(1)

声明@ts6 char(1)

声明@ts7 char(1)

声明@date 日期时间

--将时间戳分解成组件字符

设置@ts1 = substring(@timestamp,1,1)

设置@ts2 = substring(@timestamp,2,1)

设置@ts3 = substring(@timestamp,3,1)

设置@ts4 = substring(@timestamp,4,1)

设置@ts5 = substring(@timestamp,5,1)

设置@ts6 = substring(@timestamp,6,1)

设置@ts7 = substring(@timestamp,7,1)

numberVar D1N;

numberVar D2N;

numberVar D3N;

numberVar D4N;

numberVar D5N;

numberVar D6N;

numberVar D7N;

numberVar DF;

datetimeVar 时间戳;

数字变量 i:=9;

--创建字符数组

stringVar 数组位数:= ('0','1','2','3','4','5','6','7','8','9','A', 'B','C','D','E','F','G','H','I','J','K',

'L','M','N','O','P','Q','R','S','T','U','V','W','X ','Y','Z')

--确定每个字符的字符代码

对于 i:=1 到 36 做

(如果 D1=digits[i]

然后 D1N:=i-1);

对于 i:=1 到 36 做

(如果 D2=digits[i]

然后 D2N:=i-1);

对于 i:=1 到 36 做

(如果 D3=digits[i]

然后 D3N:=i-1);

对于 i:=1 到 36 做

(如果 D4=digits[i]

然后 D4N:=i-1);

对于 i:=1 到 36 做

(如果 D5=数字[i]

然后 D5N:=i-1);

对于 i:=1 到 36 做

(如果 D6=digits[i]

然后 D6N:=i-1);

对于 i:=1 到 36 做

(如果 D7=digits[i]

然后 D7N:=i-1);

//将每个数字乘以其因子并除以50得到秒数

D1N:=D1N*2176782336/50;

D2N:=D2N*60466176/50;

D3N:=D3N*1679616/50;

D4N:=D4N*46656/50;

D5N:=D5N*1296/50;

D6N:=D6N*36/50;

D7N:=D7N*1/50;

//将所有秒加在一起

DF:=D1N+D2N+D3N+D4N+D5N+D6N+D7N;

//将时间添加到 1990 年 1 月 1 日的基准时间上

时间戳:=DateAdd('s',DF,DateTime(1990,01,01,00,00,00));

//显示时间

时间戳

归期)

结尾

于 2022-02-22T02:44:46.543 回答