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

时间:2017-07-17 17:54:47

标签: mysql sas

我试图将SAS日期时间转换为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代码将SAS日期时间转换为该数字,但似乎是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);

结果:

SAS_DATETIME=1798848000
UNIX_TIMESTAMP_OFFSET=315619200
UNIX_TIMESTAMP=1483228800
-7200

根据一些谷歌搜索,我的偏移似乎是正确的。我还尝试将mySQL中的会话时区设置为不同的时区,看看是否会因使用SET SESSION time_zone = 'US/Pacific';SET SESSION time_zone = 'Europe/Helsinki';而产生影响,但它们对输出没有影响。

修改:我使用的是SAS 9.4,如果有更简单的方法可以解决这个问题,那么我也乐意将其作为答案。

1 个答案:

答案 0 :(得分:1)

您几乎肯定会受到时区的影响,因为UNIX_TIMESTAMP会将当前时间作为秒1970-01-01 00:00:00 UTC返回。因此,8小时的差异(在太平洋时区)。

根据mySQL reference on session time zones,设置会话时区影响UTC_TIMESTAMP,虽然它没有直接提及UNIX_TIMESTAMP,但它可能是同样没有效果。