我在网上搜索并发现several sources谈论将Unix时间戳转换为各种可行的格式,但没有一个允许我从Stata中实际获得这样的时间戳。截至目前,我使用
上的变体local curr_date = c(current_date)
local curr_time = c(current_time)
将时间戳应用于日志,数据集等,但我想在几秒钟内使用Unix时间戳,如果可能的话。
答案 0 :(得分: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 ...当然,从我自己的位置来看,它是令人钦佩的。)
答案 1 :(得分: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.h和stplugin.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/
所以我在那里复制了插件。然后,从Stata加载插件:
program unixtimestamp, plugin
如果未显示任何错误消息,请使用以下命令运行插件:
plugin call unixtimestamp
与任何Stata命令一样,如果您打算经常使用此命令,也可以使用宏来简化此操作:
local unixtime plugin call unixtimestamp
`unixtime'
答案 2 :(得分:-1)
我使用以下内容来获取日期/时间戳:
di "DateTime: $S_DATE $S_TIME"
<强>更新强> 您可以在Stata中直接使用Unix shell命令,为它们添加一个感叹号。要回复Unix时间,请尝试:
!date +%s
1344341160