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 中得到了它们,那么只需将两者相减并将结果除以 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 回答