2 つの SYSTEMTIME 変数の差分が 30 日以上あるかどうかを確認するための優れたアルゴリズム (または方法) を誰かが持っているかどうか尋ねたいと思いますか?
ありがとうございました
2 つの SYSTEMTIME 変数の差分が 30 日以上あるかどうかを確認するための優れたアルゴリズム (または方法) を誰かが持っているかどうか尋ねたいと思いますか?
ありがとうございました
のMSDNページにあるSYSTEMTIME
ように、
SYSTEMTIME
相対時間を取得するために、構造体に値を加算および減算することはお勧めしません。代わりに、
SYSTEMTIME
構造を構造に変換しFILETIME
ます。FILETIME
結果の構造を構造にコピーしULARGE_INTEGER
ます。- 値には通常の64ビット演算を使用し
ULARGE_INTEGER
ます。
SYSTEMTIME st1, st2;
/* ... */
FILETIME ft1, ft2;
ULARGE_INTEGER t1, t2;
ULONGLONG diff;
SystemTimeToFileTime(&st1, &ft1);
SystemTimeToFileTime(&st2, &ft2);
memcpy(&t1, &ft1, sizeof(t1));
memcpy(&t2, &ft2, sizeof(t1));
diff = (t1.QuadPart<t2.QuadPart)?(t2.QuadPart-t1.QuadPart):(t1.QuadPart-t2.QuadPart);
if(diff > (30*24*60*60)*(ULONGLONG)10000000)
{
...
}
(簡潔にするために、呼び出しのエラー処理はSystemTimeToFileTime
省略されています)
について(30*24*60*60)*(ULONGLONG)10000000
:30*24*60*60
は30日間の秒数です。1秒間の「ティック」10000000
の数です(各ティックは100 ns = 10 ^ 2 * 10 ^ -9 s = 10 ^ -7秒です)。乗算のオペランドの1つへのキャストは、通常のsのオーバーフローを回避することです(の範囲に適合する整数リテラル間で演算を実行する場合のデフォルト)。FILETIME
FILETIME
int
int
マイクロソフトは次のようにアドバイスしています
役に立つ可能性があります: