0

関数SystemTimeToFileTimeに完全に類似したものを見つけようとしましたが、見つかりませんでした。

日付差関数のためにLinux上で正しく動作するSYSTEMTIMEを持つすべてのSYSTEMTIMEおよびFILETIME構造体があります。

int64_t Delta2(const SYSTEMTIME st1, const SYSTEMTIME st2) { 

    union timeunion { FILETIME fileTime; ULARGE_INTEGER ul; } ;
    timeunion ft1;
    timeunion ft2;
    SystemTimeToFileTime(&st1, &ft1.fileTime);
    SystemTimeToFileTime(&st2, &ft2.fileTime);

    return ft2.ul.QuadPart - ft1.ul.QuadPart; 
}

関数の正確な置き換えを知っている人はいSystemTimeToFileTimeますか?

4

4 に答える 4

1

AFILETIMEは、10 ミリ秒単位のタイムスタンプであり、2 つの 32 ビット数値に分割されます。POSIX タイムスタンプ (2 番目の解像度を使用) は、単純に 100 を掛けて取得できます。

から に取得するSYSTEMTIMEには、関連するフィールドで を作成し、 を使用FILETIMEして を作成します。そのタイムスタンプを 64 ビット整数に入れ、100 を掛けて (10 ミリ秒の分解能を取得するため)、フィールドを追加します (10 で除算) 。struct tmmktimetime_tSYSTEMTIME wMillisecondsFILETIME

于 2013-02-01T13:05:20.223 に答える
0

SYSTEMTIME

月、日、年、曜日、時、分、秒、およびミリ秒の個々のメンバーを使用して、日付と時刻を指定します。時刻は、呼び出されている関数に応じて、協定世界時 (UTC) または現地時間のいずれかになります。

struct tmミリ秒はありませんが、最も近いタイプはです。

FILETIME

1601 年 1 月 1 日 (UTC) からの 100 ナノ秒間隔の数を表す 64 ビット値が含まれます。

struct timeval(マイクロ秒をサポート) またはstruct timespec(ナノ秒をサポート)を使用できます。

たとえば、すべてのファイルシステムがナノ秒をサポートしているわけではありませんext4

SystemTimeToFileTime

mktimeエポック (1970-01-01 00:00 UTC) からの秒数しか取得できませんが、これを使用できます。

ですから、控えめに言っても、正確な交換は難しいと思います。

于 2013-02-01T13:21:25.363 に答える
0

Linux には「ファイルタイム」という概念がありません。正確に何をしているかに応じて、使用する方が良い場合がありますdifftime(2つの time_t の差を浮動小数点数として秒単位で与える)か、より正確なタイムスタンプを使用して、それを 10ms 間隔の差に変換しますか?

を使用mktimeして、日付/時刻の値を に変換できますtime_t

于 2013-02-01T13:21:47.407 に答える
0

必要なものが正確に含まれている WINE プロジェクトのソースを参照することをお勧めします。

于 2013-02-01T12:58:18.457 に答える