求个求两日期间相差年月日的函数,该如何解决
求个求两日期间相差年月日的函数
即求两日期相差多少年又多少月又多少日。不考虑时分秒 用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
------解决方案--------------------
按照日历算的话有难度了。
------解决方案--------------------
如果只是单纯的相差多少天应该没什么问题,像日历那样的一个小程序应该搞不定吧
------解决方案--------------------
学习一下
顺便节分
------解决方案--------------------
++
------解决方案--------------------
用COleDateTime和COleDateTimeSpan更好。
参考下面:
即求两日期相差多少年又多少月又多少日。不考虑时分秒 用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
------解决方案--------------------
按照日历算的话有难度了。
------解决方案--------------------
如果只是单纯的相差多少天应该没什么问题,像日历那样的一个小程序应该搞不定吧
------解决方案--------------------
学习一下
顺便节分
------解决方案--------------------
++
------解决方案--------------------
用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