0

オンラインで検索したところ、Unix タイムスタンプをさまざまな実行可能な形式に変換する方法について説明しているソースがいくつか見つかりましたが、Stata 内からそのようなタイムスタンプを実際に取得できるものはありませんでした。 今のところ、私はのバリエーションを使用しています

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

タイムスタンプをログやデータセットなどに適用しますが、可能であれば、Unix タイムスタンプを秒単位で使用したいと考えています。

4

3 に答える 3

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 ユーザーですが、このサイトのほとんどの人にとって、RTFM よりも Stata の内部に入るC コードのスニペットを書く方が簡単であることは理解しています...もちろん、私が座っている場所から見ると、それなりに立派です。)

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

プラグイン作成ガイドでは、次のコマンドを使用しています。

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

-fPICただし、一部のシステムでは、フラグを使用するように指示するエラーが発生するため、コマンドにフラグを含めています。また、このような単純なプラグインには最適化は実際には必要ありませんが、それでも含めました。

unixtimestamp.pluginado/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"

更新: Unix シェル コマンドは、先頭に感嘆符を付けることで、Stata 内で直接使用できます。Unix の時刻をエコーするには、次を試してください。

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