已知一个日期d,求d+15,要考虑大小月、闰年等等...有什么现成的东西可用? 就是日期方面的计算,加几天减几天,然后输出新的年月日,有什么现成的库函数之类可用么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用MFC的话,CTime+CTimeSpan就行了。不用MFC也好办,因为CTime,CTimeSpan就是对time_t的封装,是距1970年某一天的秒数,想加15天,就加15*24*3600就行了。CTime time(nYear, nMonth, nDay, nHour, nMin, nSec);CTimeSpan span(lDays, nHours, nMins, nSecs );time += span; 呵呵,你先自己搜索下,我以前回复过这类贴子的~~#include <afx.h>#include <afxdisp.h>/********************************************************************* Function: SubTime * Description: 计算两个日期天数之差 * Input: CString strStart [开始时间,如2010-05-28] * CString strEnd [结束时间,如2010-06-28] * Output: None* Return: CString [天数差] * Others: None *********************************************************************/CString SubTime(CString strStart,CString strEnd){ CString strDates = "0"; if(strStart.IsEmpty() || strEnd.IsEmpty()) { return strDates; } COleVariant vtime1(strStart); COleVariant vtime2(strEnd); vtime1.ChangeType(VT_DATE); vtime2.ChangeType(VT_DATE); COleDateTime timeS = vtime1; COleDateTime timeE = vtime2; SYSTEMTIME stS,stE; VariantTimeToSystemTime(timeS,&stS); VariantTimeToSystemTime(timeE,&stE); CTime tmS(stS); CTime tmE(stE); CTimeSpan span = tmE-tmS; strDates.Format("%d",span.GetDays()); return strDates;}/********************************************************************* Function: AddTime * Description: 计算某日期,若干天后的日期 * Input: CString strStart [开始时间,如2010-02-25] * int nDays [天数] * Output: None* Return: CString [nDays天后的日期] * Others: None *********************************************************************/CString AddDates(CString strDate,int nDays){ CString strTemp = ""; if(strDate.IsEmpty()) { return strTemp; } COleVariant vtime(strDate); vtime.ChangeType(VT_DATE); COleDateTime time = vtime; SYSTEMTIME st; VariantTimeToSystemTime(time,&st); CTime tm1(st); CTime tm2(tm1.GetYear(),tm1.GetMonth(),tm1.GetDay() + nDays,0,0,0); strTemp.Format("%04d-%02d-%02d",tm2.GetYear(),tm2.GetMonth(),tm2.GetDay()); return strTemp;}void main(){ MessageBox(NULL,SubTime("2010-02-01","2010-03-01"),NULL,NULL); MessageBox(NULL,AddDates("2010-02-25",10),NULL,NULL);} 这句有问题吧,如果基准日期为2010-06-30,nDays = 5,那么这句就会出错,月份不会自动累加,CTime中的ASSERT(nDay>=1 && nDay<=31)也会报错~还有什么别的解决办法么?简洁点的,现成的...不用自己做一堆判断的.. md5 的源码 又有问题了,十进制的字符串如何转换成二进制的字符串? 类似ACDsee看图软件问题? 为什么我的PostThreadMessage总是失败? 请问一下图像校正所用的“外接最小矩形法”的原理 关于CSocket中的client的问题 ::SendMessage()和CWnd::SendMessage()是不是不一样了?? VB的数据报表能动态创建控件吗 SNMP:如何确保TRAP消息发送到指定的管理控制台主机 如何把几个chm(已编译的 html 文件)文件合成一个chm文件 谁能帮算一下字符数组的CRC16校验? 求助:为什么重新注册一个同名控件后,程序运行无响应?
CTime time(nYear, nMonth, nDay, nHour, nMin, nSec);
CTimeSpan span(lDays, nHours, nMins, nSecs );
time += span;
#include <afxdisp.h>/********************************************************************
* Function: SubTime
* Description: 计算两个日期天数之差
* Input: CString strStart [开始时间,如2010-05-28]
* CString strEnd [结束时间,如2010-06-28]
* Output: None
* Return: CString [天数差]
* Others: None
*********************************************************************/
CString SubTime(CString strStart,CString strEnd)
{
CString strDates = "0";
if(strStart.IsEmpty() || strEnd.IsEmpty())
{
return strDates;
}
COleVariant vtime1(strStart);
COleVariant vtime2(strEnd);
vtime1.ChangeType(VT_DATE);
vtime2.ChangeType(VT_DATE);
COleDateTime timeS = vtime1;
COleDateTime timeE = vtime2;
SYSTEMTIME stS,stE;
VariantTimeToSystemTime(timeS,&stS);
VariantTimeToSystemTime(timeE,&stE);
CTime tmS(stS);
CTime tmE(stE);
CTimeSpan span = tmE-tmS;
strDates.Format("%d",span.GetDays());
return strDates;
}
/********************************************************************
* Function: AddTime
* Description: 计算某日期,若干天后的日期
* Input: CString strStart [开始时间,如2010-02-25]
* int nDays [天数]
* Output: None
* Return: CString [nDays天后的日期]
* Others: None
*********************************************************************/
CString AddDates(CString strDate,int nDays)
{
CString strTemp = "";
if(strDate.IsEmpty())
{
return strTemp;
}
COleVariant vtime(strDate);
vtime.ChangeType(VT_DATE);
COleDateTime time = vtime;
SYSTEMTIME st;
VariantTimeToSystemTime(time,&st);
CTime tm1(st);
CTime tm2(tm1.GetYear(),tm1.GetMonth(),tm1.GetDay() + nDays,0,0,0);
strTemp.Format("%04d-%02d-%02d",tm2.GetYear(),tm2.GetMonth(),tm2.GetDay());
return strTemp;
}void main()
{
MessageBox(NULL,SubTime("2010-02-01","2010-03-01"),NULL,NULL);
MessageBox(NULL,AddDates("2010-02-25",10),NULL,NULL);
}