求个求两日期间相差年月日的函数,该如何解决

求个求两日期间相差年月日的函数
即求两日期相差多少年又多少月又多少日。不考虑时分秒 用struct tm
比如:1901-12-28至1902-3-2   相差0年又 2个月又5天
上面两个日期相差的天数不知道是5天还是2天?
若按自然月来算应是5天即:1902-1-1~1902-2-1  +  1902-2-1~1902-3-1  这是两个月,然后1902-2-1减去1901-12-28是4天,1902-3-2减去1902-3-1是1天,相加就5天?
2天是这样算的:
  1901-12-28 至 1902-1-28   +  1902-1-28 至 1902-2-28 这是两个月,然后1902-3-2减去1902-2-28是2天

------解决方案--------------------
月是个不准确的值,因此可以说都对,一般是按照日来计算的
------解决方案--------------------
用MFC的话  似乎是用CTimeSpan
------解决方案--------------------
按照日历算的话有难度了。
------解决方案--------------------
如果只是单纯的相差多少天应该没什么问题,像日历那样的一个小程序应该搞不定吧
------解决方案--------------------
学习一下
顺便节分
------解决方案--------------------
引用:
用MFC的话  似乎是用CTimeSpan
++
------解决方案--------------------
引用:
引用:用MFC的话  似乎是用CTimeSpan++

用COleDateTime和COleDateTimeSpan更好。
参考下面:
#include <afxdisp.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, TCHAR* argv[]) {
    COleDateTime t;
    COleDateTimeSpan ts;
    CString s,fmt;
    int nYear;
    int nMonth;
    int nDay;
    int nHour;
    int nMin;
    int nSec;
    int lDays;
    int nHours;
    int nMins;
    int nSecs;
    int i,N;
    // initialize MFC and print and error on failure
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {
        printf("Fatal Error: MFC initialization failed\n");
        return 1;
    }
    if (argc<13) {
        printf("Usage:%s sYYYY sMM sDD shh smm sss pDD phh pmm pss n {SQL
------解决方案--------------------
YYYY
------解决方案--------------------
YY}\n",argv[0]);
        return 2;
    }
    if (stricmp(argv[12],"SQL")==0) fmt="%Y-%m-%d %H:%M:%S";
    else if (stricmp(argv[12],"YYYY")==0) fmt="%Y%m%d %H%M%S";
    else if (stricmp(argv[12],"YY")==0) fmt="%y%m%d %H%M%S";
    else {
        printf("Usage:%s sYYYY sMM sDD shh smm sss pDD phh pmm pss n {SQL