Unix時間を日付に変換する最良の方法は何ですか?
そのための関数やアルゴリズムはありますか?
Unix時間は、エポック(1970-01-01)からの秒数です。意味に応じて、 localtime でstruct tm
に変換するか、 strftime で文字列に変換できます。
time_t t = time(NULL);
struct tm *tm = localtime(&t);
char date[20];
strftime(date, sizeof(date), "%Y-%m-%d", tm);
現地時間の州へのマニュアルとして
戻り値は、静的に割り当てられた構造体を指します。この構造体は、日付と時刻の関数への後続の呼び出しによって上書きされる可能性があります。
これは、データ競合と呼ばれるものです。これは、2つ以上のスレッドが同時にlocaltime
を呼び出す場合に発生します。
これから保護するために、Microsoftのみの機能であるlocaltime_s
の使用を提案する人もいます。 POSIXシステムでは、代わりにlocaltime_r
を使用する必要があります
Localtime_r()関数も同じことを行いますが、データをユーザー指定の構造体に格納します。
使用法は次のようになります
time_t t = time(NULL);
struct tm res;
localtime_r(&t, &res);
参照 nix/Linux時間をWindowsFILETIMEに変換
この関数は、UnixTimeからWindowsSYSTEMTIMEに変換する必要があります
SYSTEMTIME intChromeTimeToSysTime(long long int UnixTime)
{
ULARGE_INTEGER uLarge;
uLarge.QuadPart = UnixTime;
FILETIME ftTime;
ftTime.dwHighDateTime = uLarge.HighPart;
ftTime.dwLowDateTime = uLarge.LowPart;
SYSTEMTIME stTime;
FileTimeToSystemTime(&ftTime, &stTime);
return stTime;
}