0

私はC++のwin32 APIを使用しています...

私はこれらの値を持っています。

pwdlastset 日付 (例: 25-9-2012)、現在の日付 (例: 1-11-2012)、maxpwdage カウント (例: 54 日) pwdwarningdays (14 日)...

今、私はパスワードの有効期限を計算したい...

私は以下のコードを試しました...

if(lastpwdchmon==currentMonth)
                        {
                        lCount=currentDay-lastpwdchday;
                        }
                        else if(lastpwdchmon<currentMonth)
                        {
                            lCount=((currentDay+30)-lastpwdchday);
                        }

しかし、私には問題があります...

つまり、現在の日付と pwdlastset の日付の間の日数を計算する必要がありますか?

これを達成する方法は?

4

2 に答える 2

2

DATE が何であるかを知るのは難しいですが、time_t でそれらをすべて取得している場合は、2 つを引き、結果を 86400 (60*60*24) で割ります。

于 2012-11-01T12:41:06.743 に答える
1

DATECOM日付/時刻を保持するアプローチです。その整数部分にはエポックからの日数が含まれ(ここでは関係ありません)、小数部分は時刻を示します。したがって、2 間の日数を計算するには、次のようにDATEします。

DATE d1 = get_date1(), d2 = get_date2();
int number_of_days = static_cast<int>( d1 - d2 );

DATE使用できる現在の日付を取得するには:

DATE get_now( bool asUTC = false ) {
    SYSTEMTIME stm;
    (asUTC ? ::GetSystemTime : ::GetLocalTime)( &stm );
    DATE res;
    SystemTimeToVariantTime( &stm, &res );
    return res;
}

日付/時刻のフィールドを変換するには、DATE次を使用できます。

DATE to_date( int year, WORD month, WORD day,
    WORD h = 0, WORD m = 0, WORD s = 0, WORD ms = 0 )
{
    SYSTEMTIME stm = { year, month, 0, day, h, m, s, ms };
    DATE res;
    if( !SystemTimeToVariantTime(&stm, &res) ) {/* Handle error */}
    return res;
}
于 2012-11-01T17:03:57.470 に答える