我在网上搜索并找到了几个 关于将 Unix 时间戳转换为各种可行格式的资源,但没有一个资源允许我从 Stata 中真正获得这样的时间戳。截至目前,我使用变体
local curr_date = c(current_date)
local curr_time = c(current_time)
将时间戳应用于日志、数据集等,但如果可能的话,我想以秒为单位使用 Unix 时间戳。
我在网上搜索并找到了几个 关于将 Unix 时间戳转换为各种可行格式的资源,但没有一个资源允许我从 Stata 中真正获得这样的时间戳。截至目前,我使用变体
local curr_date = c(current_date)
local curr_time = c(current_time)
将时间戳应用于日志、数据集等,但如果可能的话,我想以秒为单位使用 Unix 时间戳。
实现这一点的一种方法是编写一个简单的插件。在名为的文件中编译此代码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.h和stplugin.c放在同一目录中(对于 Linux 系统):
gcc -O3 -shared -DSYSTEM=OPUNIX -fPIC stplugin.c unix_timestamp.c -o unixtimestamp.plugin
创建插件的指南使用以下命令:
gcc -shared -DSYSTEM=OPUNIX stplugin.c unixtimestamp.c -o unixtimestamp.plugin
但在某些系统上,这会给出一个错误,指示您使用该-fPIC
标志,这就是我将它包含在我的命令中的原因。此外,对于这样一个简单的插件,优化并不是真正必要的,但无论如何我都将它们包括在内。
unixtimestamp.plugin
应该放在ado/personal/
目录中。运行 Stata 的sysdir
函数来找到它的位置。在我的系统上,HOME/ado/personal/
所以我在那里复制了插件。然后,从 Stata 加载插件:
program unixtimestamp, plugin
如果未显示错误消息,请使用以下命令运行插件:
plugin call unixtimestamp
与任何 Stata 命令一样,如果您打算经常使用此命令,也可以使用宏来简化此操作:
local unixtime plugin call unixtimestamp
`unixtime'
我使用以下内容获取日期/时间戳:
di "DateTime: $S_DATE $S_TIME"
更新: 您可以直接在 Stata 中使用 Unix shell 命令,方法是在它们前面加上一个感叹号。要回显 Unix 时间,请尝试:
!date +%s
1344341160