C言語で1970年1月1日以降のUTCTimeをミリ秒単位で取得するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/1952290

  •  21-09-2019
  •  | 
  •  

質問

C言語でtime.hを使用して1970年のミリ秒とその小数部分を取得する方法はありますか?

役に立ちましたか?

解決

これは Ubuntu Linux で動作します。

#include <sys/time.h>

...

struct timeval tv;

gettimeofday(&tv, NULL);

unsigned long long millisecondsSinceEpoch =
    (unsigned long long)(tv.tv_sec) * 1000 +
    (unsigned long long)(tv.tv_usec) / 1000;

printf("%llu\n", millisecondsSinceEpoch);

この記事の執筆時点では、上記の printf() は 1338850197035 を返します。次の場所で健全性チェックを行うことができます TimestampConvert.com Web サイトに値を入力すると、人間が判読できる同等の時刻を取得できます (ただし、ミリ秒の精度はありません)。

他のヒント

あなたはミリ秒の解像度をしたい場合は、

、あなたは、POSIXにはgettimeofday()を使用することができます。 Windows実装のWindows のはgettimeofday関数を参照してください。

#include <sys/time.h>

...

struct timeval tp;
gettimeofday(&tp);
long int ms = tp.tv_sec * 1000 + tp.tv_usec / 1000;

これは、標準Cはないが、gettimeofday()は、システム由来、およびPOSIXであるSysVのとBSDの両方に存在します。それはstruct timevalにおけるエポック時刻を返します:

struct timeval {
    time_t      tv_sec;     /* seconds */
    suseconds_t tv_usec;    /* microseconds */
};
    // the system time
    SYSTEMTIME systemTime;
    GetSystemTime( &systemTime );

    // the current file time
    FILETIME fileTime;
    SystemTimeToFileTime( &systemTime, &fileTime );

    // filetime in 100 nanosecond resolution
    ULONGLONG fileTimeNano100;
    fileTimeNano100 = (((ULONGLONG) fileTime.dwHighDateTime) << 32) + fileTime.dwLowDateTime;

    //to milliseconds and unix windows epoche offset removed
    ULONGLONG posixTime = fileTimeNano100/10000 - 11644473600000;
    return posixTime;

Unixの時間またはPOSIX時間には、の秒の中の時間ですエポックからあなたは言及しています。

bzabhi のの答えは正しいです:1000によって単に乗算あなたのUnixタイムスタンプはミリ秒を取得するために、

すべてのミリ秒の値をUnixタイムスタンプに依存することによって返されることに注意してくださいは、(12345678000のように)の倍数の1000になります。分解能は依然としてわずか1秒である。

あなたは小数部分を取得することはできません。

パベルからのコメントも正しいです。 Unixタイムスタンプは、 に口座うるう秒を考慮していません。これは、それもあまり賢明ミリ秒への変換に頼るようになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top