求个求两日期间相差年月日的函数
即求两日期相差多少年又多少月又多少日。不考虑时分秒 用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
[解决办法]
按照日历算的话有难度了。
[解决办法]
如果只是单纯的相差多少天应该没什么问题,像日历那样的一个小程序应该搞不定吧
[解决办法]
学习一下
顺便节分
[解决办法]
#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;
}