C言語で1970年1月1日以降のUTCTimeをミリ秒単位で取得するにはどうすればよいですか
質問
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 */
};
UnixおよびLinuxの場合は、あなたが使用することができますはgettimeofdayするます。
あなたが使用できるWin32用の GetSystemTimeAsFileTime >その後、のtime_t +ミリ秒のに変換します。
// 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タイムスタンプは、 に口座うるう秒を考慮していません。これは、それもあまり賢明ミリ秒への変換に頼るようになります。