首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-02-25 
求个求两日期间相差年月日的函数即求两日期相差多少年又多少月又多少日。不考虑时分秒 用struct tm比如:190

求个求两日期间相差年月日的函数
即求两日期相差多少年又多少月又多少日。不考虑时分秒 用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


[解决办法]
YYYY
[解决办法]
YY}\n",argv[0]);
        return 3;
    }
    nYear =atoi(argv[ 1]);
    nMonth=atoi(argv[ 2]);
    nDay  =atoi(argv[ 3]);
    nHour =atoi(argv[ 4]);
    nMin  =atoi(argv[ 5]);
    nSec  =atoi(argv[ 6]);
    lDays =atoi(argv[ 7]);
    nHours=atoi(argv[ 8]);
    nMins =atoi(argv[ 9]);
    nSecs =atoi(argv[10]);
    N     =atoi(argv[11]);
    if (N<=0) {
        printf("Usage:%s sYYYY sMM sDD shh smm sss pDD phh pmm pss n {SQL
[解决办法]
YYYY
[解决办法]
YY}\n",argv[0]);
        return 4;
    }
    t=COleDateTime( nYear, nMonth, nDay, nHour, nMin, nSec);
    ts=COleDateTimeSpan( lDays, nHours, nMins, nSecs );
    for (i=1;i<=N;i++) {
        s=t.Format(fmt);
        printf("%08d %s\n",i,s);
        t=t+ts;
    }
    return 0;
}

热点排行