2012-07-26 108 views
0

我在網上搜索,發現severalsources,談論轉換Unix時間戳爲各種可行的格式,但沒有讓我實際上從Stata內獲得這樣一個時間戳。截至目前,我用有沒有辦法在Stata中獲得Unix時間戳?

local curr_date = c(current_date) 
local curr_time = c(current_time) 

變化,以時間戳施加日誌,數據集等,但我想只要使用Unix時間戳在幾秒鐘內,如果可能的話。

回答

2

你熟悉help datetime?我的理解是Unix的時間戳會是這樣的

display %12.0g clock("`c(current_date)' `c(current_time)'", "DMY hms")/1000 - clock("1 Jan 1970", "DMY")/1000 

這當然就可以在其他情況下使用爲好。 (我不是C程序員,我是一名Stata用戶,但我確實明白,對於本網站上的大多數人來說,寫入a snippet of C code會更容易進入Stata的內容而不是RTFM ......這在其中是令人欽佩的自己的方式從那裏我坐,當然)

+0

這是一個很好的功能,我沒有看到當我閱讀文檔,但我注意到使用它時有些奇怪。我用那個Stata命令,在時間過後的一秒鐘之後。Python中的time()'命令和已知的準確的Stata命令,而Stata命令大約需要18,000 **秒的時間,如果我需要精確的時間戳,這是不可用的。我用C'time'函數進行了相同的測試,看到了類似的結果。 – 2012-07-27 18:57:47

+0

目前我沒有我的插件,但我將在今天晚上的do文件中使用這兩個命令並測量差異(如果有的話)。這樣,每次運行命令之間的時間僅爲幾毫秒,而不是手動測試時的1或2秒。但是,即使包括那幾秒鐘也不足以解釋我不認爲的區別。 – 2012-07-27 18:57:54

+0

18000秒的差異聽起來很像我的5個時區差異。也就是說,您的計算機運行紐約或塔什干當地時間,而不是GMT時間。 – StasK 2012-07-27 20:00:03

1

達到此目的的一種方法是編寫一個簡單的插件。編譯此代碼,在一個名爲unixtimestamp.c

#include "stplugin.h" 
#include <stdlib.h> 
#include <time.h> 
#include <stdio.h> 

STDLL stata_call(int argc, char *argv[]) 
{ 
    time_t seconds; 
    seconds = time(NULL); 
    char buf[33]; 
    sprintf(buf, "%d", seconds); 

    SF_display(buf); 
    return(0); 
} 

stplugin.hstplugin.c在使用此命令(用於Linux系統)相同目錄下的文件:

gcc -O3 -shared -DSYSTEM=OPUNIX -fPIC stplugin.c unix_timestamp.c -o unixtimestamp.plugin 

guide創建插件使用這個命令:

gcc -shared -DSYSTEM=OPUNIX stplugin.c unixtimestamp.c -o unixtimestamp.plugin 

但在某些系統上,這會給出錯誤提示您使用-fPIC標誌,這就是爲什麼我將它包含在我的命令中。另外,對於這樣一個簡單的插件來說,優化並不是真的需要,但是我不管它們。

unixtimestamp.plugin應該放在ado/personal/目錄中。運行Stata的sysdir函數來查找它的位置。在我的系統上,它是HOME/ado/personal/,所以我在那裏複製了插件。如果沒有顯示錯誤消息

program unixtimestamp, plugin 

,運行帶有插件:那麼,從塔塔,加載插件

plugin call unixtimestamp 

與任何Stata的命令,您還可以使用宏來簡化這個如果你打算使用此命令頻繁:

local unixtime plugin call unixtimestamp 
`unixtime' 
-1

我用下面的搶日期/時間標記:

更新: 您可以使用Unix外殼由前綴直接命令裏面的Stata他們感嘆號。回覆Unix時間嘗試:

!date +%s 
1344341160 
+0

對不起,我不認爲我的問題很清楚。我已經有了以這種格式獲取時間戳的方法,但我需要幾秒鐘的時間戳。我原來的問題中使用'creturn'的命令已經給了我這種格式的時間戳。 – 2012-08-07 11:14:06

相關問題