2017-07-17 9 views
2

SASの日時をUNIXのタイムスタンプに変換しようとしていますが、結果に8時間の差が生じています。私はそれが何とかタイムゾーンの問題に関連していると思うが、私はどのように把握することはできません。SAS datetimeをSASのUNIXタイムスタンプに変換する

まず、mySQLで次の文を実行して目的の結果を得ました。

問合せ:

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

結果:私は、その数にSASの日時を変換するために、SASコードを記述しようとしたが、8時間でオフであるように思わ

UNIX_TIMESTAMP('2017-01-01 00:00:00') 
--------------------------------------- 
          1483221600 

%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 

いくつかのGoogle検索に基づいて、私のオフセットが正しいようです。私はまた、異なる時間帯にmysqlのセッションタイムゾーンを設定して、SET SESSION time_zone = 'US/Pacific';SET SESSION time_zone = 'Europe/Helsinki';を使用して違いが生じるかどうかを確認しようとしましたが、出力には違いはありません。

編集:私はSAS 9.4を使用しています。これについて簡単な方法がある場合は、私もそのことを喜んで回答にします。

答えて

1

UNIX_TIMESTAMPは現在の時刻を秒として返します(1970-01-01 00:00:00 UTC)ので、ほとんどの場合タイムゾーンの影響を受けています。したがって、8時間の違い(太平洋のタイムゾーンにある)。セッションのタイムゾーンを設定

mySQL reference on session time zonesパー

は、はないUTC_TIMESTAMPに影響を与えず、それが直接UNIX_TIMESTAMP言及していない一方で、それはおそらくそこに同じ非効果があります。

+1

MySQLの人ではありませんが、私は彼がこれを 'CONVERT_TZ()'関数と組み合わせてUTCオフセットを取り消すことができると思います。 – DomPazz

+0

私は実際にMySQLの人ではないので、特定の修正を提案することを躊躇していますが、それはうまくいくようです。 – Joe

+0

@RobertPenr​​idge - ドームのソリューションがうまくいくならば、私はそれを私の答えに喜んで編集します(またはあなたまたはDomは別の答えを投稿することができます)。 – Joe

関連する問題