2012-11-01 42 views
0

我正在使用C++ win32 API ...如何使用C++ Win32 API計算兩個日期之間的天數?

我有這些值。

的pwdLastSet日期(例如:25-9-2012),當前日期(例如:2012年1月11日),maxpwdage 計數(前54天)pwdwarningdays(14天)...

現在我要計算密碼過期日期...

我已經嘗試下面的代碼...

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

,但是,我有一個問題...

我的意思是,只需要計算當前日期& pwdlastset日期之間有多少天?

如何實現這一目標?

+0

您正在使用什麼類型的DATE結構? 'SYSTEMTIME','DATE','FILETIME'? – BigBoss

+0

@ BigBoss:lastpwdchday是DATE ... maxpwdage LONG ...但我將所有轉換爲整數。 –

+0

轉換爲刻度。添加適當的秒數。將這些滴答變成日期。 ...?利潤!!! –

回答

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; 
} 
+0

如何獲取get_date1()和get_date2()函數和關鍵字... –

+0

'get_date1'和'get_date2'是示例函數,但是如果您想獲取當前日期,或者您有日期的各個字段,請參閱我的編輯回答 – BigBoss

1

很難知道你的DATE是什麼,但是如果你已經在time_t中得到了它們,那麼只需減去這兩者並將結果除以86400(60 * 60 * 24)即可。

相關問題