0

2 つの SYSTEMTIME 変数の差分が 30 日以上あるかどうかを確認するための優れたアルゴリズム (または方法) を誰かが持っているかどうか尋ねたいと思いますか?

ありがとうございました

4

3 に答える 3

7

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)1000000030*24*60*60は30日間の秒数です。1秒間の「ティック」10000000の数です(各ティックは100 ns = 10 ^ 2 * 10 ^ -9 s = 10 ^ -7秒です)。乗算のオペランドの1つへのキャストは、通常のsのオーバーフローを回避することです(の範囲に適合する整数リテラル間で演算を実行する場合のデフォルト)。FILETIMEFILETIMEintint

于 2012-06-14T23:57:18.217 に答える
0

マイクロソフトは次のようにアドバイスしています

役に立つ可能性があります:

于 2012-06-15T00:03:58.860 に答える