Mysql 在SAS中将SAS datetime转换为UNIX时间戳

Mysql 在SAS中将SAS datetime转换为UNIX时间戳,mysql,sas,Mysql,Sas,我试图将SAS datetime转换为UNIX时间戳,但结果相差8小时。我认为这与时区问题有关,但我不知道怎么回事 首先,我在mySQL中运行以下语句以获得所需的结果 查询: SELECT UNIX_TIMESTAMP('2017-01-01 00:00:00') AS wanted_unix_timestamp 结果: UNIX_TIMESTAMP('2017-01-01 00:00:00') ---------------------------------------

我试图将SAS datetime转换为UNIX时间戳,但结果相差8小时。我认为这与时区问题有关,但我不知道怎么回事

首先,我在mySQL中运行以下语句以获得所需的结果

查询:

SELECT UNIX_TIMESTAMP('2017-01-01 00:00:00') AS wanted_unix_timestamp
结果:

UNIX_TIMESTAMP('2017-01-01 00:00:00')  
---------------------------------------
                             1483221600
SAS_DATETIME=1798848000
UNIX_TIMESTAMP_OFFSET=315619200
UNIX_TIMESTAMP=1483228800
-7200
然后,我尝试编写SAS代码将SAS datetime转换为该数字,但似乎需要8小时:

%let wanted_unix_timestamp = 1483221600;

%let sas_epoch = '01jan1960:00:00:00'dt;
%let unix_epoch = '01jan1970:00:00:00'dt;
%let unix_timestamp_offset = %sysfunc(intck(seconds,&sas_epoch,&unix_epoch)); 

%let sas_datetime = %sysfunc(dhms(%sysfunc(mdy(1,1,2017)),0,0,0));

%let unix_timestamp = %eval(&sas_datetime - &unix_timestamp_offset);

%put &=sas_datetime;
%put &=unix_timestamp_offset;
%put &=unix_timestamp;
%put %eval(&wanted_unix_timestamp - &unix_timestamp);
结果:

UNIX_TIMESTAMP('2017-01-01 00:00:00')  
---------------------------------------
                             1483221600
SAS_DATETIME=1798848000
UNIX_TIMESTAMP_OFFSET=315619200
UNIX_TIMESTAMP=1483228800
-7200
根据一些谷歌搜索,我的偏移量似乎是正确的。我还尝试将mySQL中的会话时区设置为不同的时区,以通过使用
SET session time_zone='US/Pacific'查看这是否会产生差异
设置会话时区='欧洲/赫尔辛基'但它们对输出没有影响


编辑:我使用的是SAS 9.4,因此如果有更简单的方法,我也很乐意将其作为答案。

您几乎肯定会受到时区的影响,因为
UNIX\u TIMESTAMP
以秒的形式返回当前时间,从
1970-01-01 00:00 UTC
。因此有8小时的时差(在太平洋时区)


根据,设置会话时区不会影响
UTC\u TIMESTAMP
,虽然它没有直接提到
UNIX\u TIMESTAMP
,但它可能在那里没有同样的效果。

不是MySQL用户,但我认为他可以将其与
CONVERT\u TZ()
函数结合起来,以抵消UTC偏移量。这很有意义,我不是一个真正的MySQL用户,也不是一个对建议具体的修复方案如此犹豫不决的人,但这看起来确实应该是可行的。@RobertPenridge-如果Dom的解决方案可行,我会很高兴地将其编辑到我的答案中(或者你或Dom可以随意发布一个单独的答案),请告诉我们。