質問

I searched online and found several sources that talk about converting Unix timestamps to various workable formats, but none that allow me to actually get such a timestamp from within Stata. As of now, I use variations on

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

to apply timestamps to logs, data sets, etc. but I'd like to just use the Unix timestamp in seconds, if possible.

役に立ちましたか?

解決

Are you familiar with help datetime? My understanding is that the Unix time stamp would be something like

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

which of course you can use in other circumstances as well. (I am not a C programmer, I am a Stata user, but I do understand that it is easier for most people on this site to write a snippet of C code that would go into the guts of Stata than to RTFM... which is admirable in its own ways from where I sit, of course.)

他のヒント

One way to achieve this is to write a simple plugin. Compile this code, in a file called 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);
}

with stplugin.h and stplugin.c in the same directory using this command (for a Linux system):

gcc -O3 -shared -DSYSTEM=OPUNIX -fPIC stplugin.c unix_timestamp.c -o unixtimestamp.plugin

The guide to creating plugins uses this command:

gcc -shared -DSYSTEM=OPUNIX stplugin.c unixtimestamp.c -o unixtimestamp.plugin

but on some systems, this gives an error instructing you to use the -fPIC flag, which is why I include it in my command. Also, optimizations aren't really necessary for such a simple plugin, but I included them regardless.

unixtimestamp.plugin should be placed in the ado/personal/ directory. Run Stata's sysdir function to find its location. On my system, it's HOME/ado/personal/ so I copied the plugin there. Then, from Stata, load the plugin:

program unixtimestamp, plugin

If no error message is displayed, run the plugin with:

plugin call unixtimestamp

As with any Stata command, you can also use a macro to simplify this if you plan to use this command frequently:

local unixtime plugin call unixtimestamp
`unixtime'

I use the following to grab a date/time stamp:

di "DateTime: $S_DATE $S_TIME"

Updated: You may use Unix shell commands directly inside Stata by prefixing them an exclamation mark. To echo Unix time try:

!date +%s
1344341160
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top