有没有办法在Stata中获取Unix时间戳?

时间:2012-07-26 20:00:07

标签: stata

我在网上搜索并发现several sources谈论将Unix时间戳转换为各种可行的格式,但没有一个允许我从Stata中实际获得这样的时间戳。截至目前,我使用

上的变体
local curr_date = c(current_date)
local curr_time = c(current_time)

将时间戳应用于日志,数据集等,但我想在几秒钟内使用Unix时间戳,如果可能的话。

3 个答案:

答案 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.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/所以我在那里复制了插件。然后,从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