web-dev-qa-db-ja.com

Unixの読み取り可能な日付までの時間

Unix時間を日付に変換する最良の方法は何ですか?

そのための関数やアルゴリズムはありますか?

11
SuperUser

Unix時間は、エポック(1970-01-01)からの秒数です。意味に応じて、 localtimestruct 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);
15
Olaf Dietsche

time_tに時間があると仮定します。まず、それをstruct tmに変換する必要があります。これは、ローカルタイムゾーンとGMTのどちらを使用するかに応じて、 localtime または gmtime で実行できます。

次に、そのstruct tmstrftime の文字列としてフォーマットできます。たとえば、2012-11-24のような日付を取得するには、"%Y-%m-%d"の形式を使用します。

2
melpomene

参照 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;

}
0