2012-07-26 64 views
0

我在网上搜索,发现severalsources,谈论转换Unix时间戳为各种可行的格式,但没有让我实际上从Stata内获得这样一个时间戳。截至目前,我用有没有办法在Stata中获得Unix时间戳?

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

变化,以时间戳施加日志,数据集等,但我想只要使用Unix时间戳在几秒钟内,如果可能的话。

回答

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 ......这在其中是令人钦佩的自己的方式从那里我坐,当然)

+0

这是一个很好的功能,我没有看到当我阅读文档,但我注意到使用它时有些奇怪。我用那个Stata命令,在时间过后的一秒钟之后。Python中的time()'命令和已知的准确的Stata命令,而Stata命令大约需要18,000 **秒的时间,如果我需要精确的时间戳,这是不可用的。我用C'time'函数进行了相同的测试,看到了类似的结果。 – 2012-07-27 18:57:47

+0

目前我没有我的插件,但我将在今天晚上的do文件中使用这两个命令并测量差异(如果有的话)。这样,每次运行命令之间的时间仅为几毫秒,而不是手动测试时的1或2秒。但是,即使包括那几秒钟也不足以解释我不认为的区别。 – 2012-07-27 18:57:54

+0

18000秒的差异听起来很像我的5个时区差异。也就是说,您的计算机运行纽约或塔什干当地时间,而不是GMT时间。 – StasK 2012-07-27 20:00:03

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/,所以我在那里复制了插件。如果没有显示错误消息

program unixtimestamp, plugin 

,运行带有插件:那么,从塔塔,加载插件

plugin call unixtimestamp 

与任何Stata的命令,您还可以使用宏来简化这个如果你打算使用此命令频繁:

local unixtime plugin call unixtimestamp 
`unixtime' 
-1

我用下面的抢日期/时间标记:

更新: 您可以使用Unix外壳由前缀直接命令里面的Stata他们感叹号。回复Unix时间尝试:

!date +%s 
1344341160 
+0

对不起,我不认为我的问题很清楚。我已经有了以这种格式获取时间戳的方法,但我需要几秒钟的时间戳。我原来的问题中使用'creturn'的命令已经给了我这种格式的时间戳。 – 2012-08-07 11:14:06

相关问题