0

我在网上搜索并找到了几个 关于将 Unix 时间戳转换为各种可行格式的资源,但没有一个资源允许我从 Stata 中真正获得这样的时间戳。截至目前,我使用变体

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

将时间戳应用于日志、数据集等,但如果可能的话,我想以秒为单位使用 Unix 时间戳。

4

3 回答 3

2

你熟悉帮助日期时间吗?我的理解是 Unix 时间戳将类似于

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

当然,您也可以在其他情况下使用。(我不是 C 程序员,我是 Stata 用户,但我确实明白,对于这个站点上的大多数人来说,编写一段进入 Stata 内部的 C 代码片段比编写 RTFM 更容易......当然,从我坐的地方来看,它以自己的方式令人钦佩。)

于 2012-07-27T18:24:44.807 回答
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

创建插件的指南使用以下命令:

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'
于 2012-07-27T13:21:59.990 回答
-1

我使用以下内容获取日期/时间戳:

di "DateTime: $S_DATE $S_TIME"

更新: 您可以直接在 Stata 中使用 Unix shell 命令,方法是在它们前面加上一个感叹号。要回显 Unix 时间,请尝试:

!date +%s
1344341160
于 2012-08-07T11:11:04.923 回答