web-dev-qa-db-ja.com

Cでunixタイムスタンプをintとして取得するにはどうすればよいですか?

現在のタイムスタンプを取得し、fprintfを使用して出力したいと思います。

45
Tim

32ビットシステムの場合:

fprintf(stdout, "%u\n", (unsigned)time(NULL)); 

64ビットシステムの場合:

fprintf(stdout, "%lu\n", (unsigned long)time(NULL)); 
58
Dmitry Poroh

time()によって返された値をキャストしています

#include <stdio.h>
#include <time.h>

int main(void) {
    printf("Timestamp: %d\n",(int)time(NULL));
    return 0;
}

あなたが欲しいもの?

$ gcc -Wall -Wextra -pedantic -std=c99 tstamp.c && ./a.out
Timestamp: 1343846167

エポック以降のマイクロ秒を取得するには、C11以降、ポータブルな方法を使用します

int timespec_get(struct timespec *ts, int base)

残念ながら、C11はまだどこでも利用できるわけではないので、現在のところ、ポータブルに最も近いのはPOSIX関数clock_gettimeまたはgettimeofday(POSIX.1-2008で廃止とマークされ、clock_gettime)。

両方の機能のコードはほぼ同じです。

#include <stdio.h>
#include <time.h>
#include <stdint.h>
#include <inttypes.h>

int main(void) {

    struct timespec tms;

    /* The C11 way */
    /* if (! timespec_get(&tms, TIME_UTC)) { */

    /* POSIX.1-2008 way */
    if (clock_gettime(CLOCK_REALTIME,&tms)) {
        return -1;
    }
    /* seconds, multiplied with 1 million */
    int64_t micros = tms.tv_sec * 1000000;
    /* Add full microseconds */
    micros += tms.tv_nsec/1000;
    /* round up if necessary */
    if (tms.tv_nsec % 1000 >= 500) {
        ++micros;
    }
    printf("Microseconds: %"PRId64"\n",micros);
    return 0;
}
26
Daniel Fischer

2番目の精度で、 gettimeofday() functionから取得するtimeval構造体のtv_secフィールドを印刷できます。例えば:

#include <sys/time.h>
#include <stdio.h>

int main()
{
    struct timeval tv;
    gettimeofday(&tv, NULL);
    printf("Seconds since Jan. 1, 1970: %ld\n", tv.tv_sec);
    return 0;
}

コンパイルと実行の例:

$ gcc -Wall -o test ./test.c 
$ ./test 
Seconds since Jan. 1, 1970: 1343845834

ただし、エポックからしばらく経っていたので、最近ではlong intが秒数に合わせて使用​​されていることに注意してください。

人間が読める時間を出力する機能もあります。詳細については このマニュアルページ をご覧ください。 ctime()を使用した例を次に示します。

#include <time.h>
#include <stdio.h>

int main()
{
    time_t clk = time(NULL);
    printf("%s", ctime(&clk));
    return 0;
}

実行と出力の例:

$ gcc -Wall -o test ./test.c 
$ ./test 
Wed Aug  1 14:43:23 2012
$ 
11
user405725
#include <stdio.h>
#include <time.h>

int main ()
{
   time_t seconds;

   seconds = time(NULL);
   printf("Seconds since January 1, 1970 = %ld\n", seconds);

   return(0);
}

同様の結果が得られます:
1970年1月1日からの秒数= 1476107865

0
Ivan Kolesnikov