2013-12-13 3 views
0

В моем приложении я должен узнать точный год, месяц и день между двумя датами. Я попытался сделать снипп. но ответ неверен. Я использовал CTime для от до дат. Результат получается в классе CTimeSpan. CTimeSpan имеет функцию-член, такую ​​как GetDays. Мы узнаем год, месяц и день из Total Days, но ответ неверен. Есть ли способ?Как рассчитать точный год, месяц и день между двумя датами в vC++/MFC

Заранее спасибо

+0

Для некоторых целей, классы COleDateTime и COleDateTimeSpan работать лучше (в частности, они работают в течение более длительного промежутка времени). –

+0

CTimeSpan и COleDateTime не сильно отличаются – Riskhan

ответ

1

Для этого нет общей функции.

Моя идея была бы:

COleDateTime date1(1979,12,31,0,0,0), 
       date2(2004,10,01,0,0,0); 

    // Get the normal differences 
    int iYears = date2.GetYear()-date1.GetYear(), 
     iMonths = date2.GetMonth()-date1.GetMonth(), 
     iDays = date2.GetDay()-date1.GetDay(); 

    // Problematic underflow of days. 
    if (iDays<0) 
    { 
    // One month less 
    --iMonths; 
    // Advance from the start date until we reach the 1st of next month 
    for (iDays=0; (date1+COleDateTimeSpan(iDays,0,0,0)).GetDay()!=1; ++iDays) 
     ; 

    // Now get the days from the 1st of the second date to the desired date. 
    iDays += static_cast<int>((COleDateTime(date2.GetYear(),date2.GetMonth(),1,0,0,0)-date2).GetTotalDays()); 
    }  

    // underflow of months 
    if (iMonths<0) 
    { 
    --iYears; 
    iMonths +=12; 
    } 
+0

Я попробую вашу идею. – Riskhan

0

Я не вижу никакой CTimeSpan::GetTotalDays() функции в MSDN Docs.

В любом случае функции GetTotalHours/GetTotalMinutes возвращают число Завершить Часы/Минуты и не полностью отображают значение TimeSpan; наилучшим способом было бы использовать GetTotalSeconds и преобразовывать его по мере необходимости.

+0

Извините .. not GetTotalDays() is GetDays() ... я исправил его – Riskhan

Смежные вопросы