2017-07-17 572 views
2

我試圖將SAS日期時間轉換爲UNIX時間戳,但在結果中獲得了8小時的差異。我認爲這與時區問題有某種關係,但我無法弄清楚。將SAS日期時間轉換爲SAS中的UNIX時間戳

首先,我在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

你幾乎肯定會受到時區的影響,因爲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的解決方案有效,我會很樂意將其編輯到我的答案中(或者您或Dom可以隨意發佈一個單獨的答案),請讓我們知道。 – Joe

相關問題