我在网上搜索,发现severalsources,谈论转换Unix时间戳为各种可行的格式,但没有让我实际上从Stata内获得这样一个时间戳。截至目前,我用有没有办法在Stata中获得Unix时间戳?
local curr_date = c(current_date)
local curr_time = c(current_time)
变化,以时间戳施加日志,数据集等,但我想只要使用Unix时间戳在几秒钟内,如果可能的话。
我在网上搜索,发现severalsources,谈论转换Unix时间戳为各种可行的格式,但没有让我实际上从Stata内获得这样一个时间戳。截至目前,我用有没有办法在Stata中获得Unix时间戳?
local curr_date = c(current_date)
local curr_time = c(current_time)
变化,以时间戳施加日志,数据集等,但我想只要使用Unix时间戳在几秒钟内,如果可能的话。
你熟悉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 ......这在其中是令人钦佩的自己的方式从那里我坐,当然)
达到此目的的一种方法是编写一个简单的插件。编译此代码,在一个名为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/
,所以我在那里复制了插件。如果没有显示错误消息
program unixtimestamp, plugin
,运行带有插件:那么,从塔塔,加载插件
plugin call unixtimestamp
与任何Stata的命令,您还可以使用宏来简化这个如果你打算使用此命令频繁:
local unixtime plugin call unixtimestamp
`unixtime'
我用下面的抢日期/时间标记:
更新: 您可以使用Unix外壳由前缀直接命令里面的Stata他们感叹号。回复Unix时间尝试:
!date +%s
1344341160
对不起,我不认为我的问题很清楚。我已经有了以这种格式获取时间戳的方法,但我需要几秒钟的时间戳。我原来的问题中使用'creturn'的命令已经给了我这种格式的时间戳。 – 2012-08-07 11:14:06
这是一个很好的功能,我没有看到当我阅读文档,但我注意到使用它时有些奇怪。我用那个Stata命令,在时间过后的一秒钟之后。Python中的time()'命令和已知的准确的Stata命令,而Stata命令大约需要18,000 **秒的时间,如果我需要精确的时间戳,这是不可用的。我用C'time'函数进行了相同的测试,看到了类似的结果。 – 2012-07-27 18:57:47
目前我没有我的插件,但我将在今天晚上的do文件中使用这两个命令并测量差异(如果有的话)。这样,每次运行命令之间的时间仅为几毫秒,而不是手动测试时的1或2秒。但是,即使包括那几秒钟也不足以解释我不认为的区别。 – 2012-07-27 18:57:54
18000秒的差异听起来很像我的5个时区差异。也就是说,您的计算机运行纽约或塔什干当地时间,而不是GMT时间。 – StasK 2012-07-27 20:00:03