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()
はSysVとBSD派生システムの両方に存在し、POSIXにあります。エポック以降の時間を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;
nix時間またはPosix時間 は、あなたが言及したエポックからの秒での時間です。
bzabhi の答えは正しいです。ミリ秒を取得するには、Unixタイムスタンプに1000を掛けるだけです。
Unixタイムスタンプに依存して返されるすべてのミリ秒値は、multiples1000(12345678000など)になることに注意してください。解像度はまだわずか1秒です。
小数部を取得できません
Pavelからのコメントも正しいです。 Unixタイムスタンプでは、うるう秒は考慮されません。これにより、ミリ秒への変換に依存することがさらに賢くなくなります。