已知截止日期及月数,倒推每个月的起始及截日期?

wxshzf 2005-09-26 05:26:13
问题如上所述,下举一例:如截止日期是20051229,月数是12个月,现要倒推回去得到如此的时间段:
起始日期 截至日期
20051130 -- 20051229
20051030 -- 20051129
20050930 -- 20051029
...............
即求函数 MyFunction(int nMonths,CTIME EndDate),函数返回如上分解的时间段[可能是一个二维整数数组或是其它}?谢谢,让大侠与高手们辛若哪?!
...全文
957 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
12月不正是一年吗?一年先按365天记,用CTimeSpan计算出一个起始值,再根据起始年是否是润年来修正起始日期,5行代码就好。
djfu 2005-09-27
  • 打赏
  • 举报
回复
这个问题的技巧还是挺高的,源码如下:

#include <afx.h>
#include <time.h>
#include <iostream>
using namespace std;

BOOL MonthPeriod(int nMonthCount,CTime EndDate, CStringArray &sa)
{
int nYear, nTmpYear;
int nMonth, nTmpMonth;
int nDay, nTmpDay;
CString sTmp;

time_t tm1;
tm1 = time(NULL);

nYear = EndDate.GetYear();
nMonth = EndDate.GetMonth();
nDay = EndDate.GetDay();

int nOldMonth = nMonth;
int nCount = 0;

struct tm tmSampleData = { 0, 0, 1, nDay, nMonth - 1, nYear - 1900 };

while(nCount < nMonthCount)
{
tmSampleData.tm_mday--;
time_t tData = mktime(&tmSampleData);
char szData[20] = { 0 };
strftime(szData, 20, "%Y-%m-%d", localtime(&tData));
sscanf(szData, "%4d-%02d-%02d", &nTmpYear, &nTmpMonth, &nTmpDay);

if(nTmpMonth != nOldMonth)
{
nCount++;
nOldMonth = nTmpMonth;
sTmp.Format("%s", szData);
sa.Add(sTmp);
}
}
return TRUE;
}

void main(void)
{
printf("\n TIME PERIOD TEST NOW\n");
CStringArray sa;
MonthPeriod(12, CTime(2005, 7, 30, 18, 30, 20), sa);
for(int j = 0; j < sa.GetSize(); j++)
cout << sa[j].operator LPCTSTR() << endl;

getchar();
printf("\n");
}

程序输出:

TIME PERIOD TEST NOW
2005-06-30
2005-05-31
2005-04-30
2005-03-31
2005-02-28
2005-01-31
2004-12-31
2004-11-30
2004-10-31
2004-09-30
2004-08-31
2004-07-31

qc_jrj 2005-09-27
  • 打赏
  • 举报
回复
比较烦,CTimeSpan 只能按天算。
还得把年、月换成天。
  • 打赏
  • 举报
回复
CTimeSpan类帮你算的,你调用就好了。具体代码我没有。
飞天舞 2005-09-26
  • 打赏
  • 举报
回复
自已动手,丰衣足食!!
wxshzf 2005-09-26
  • 打赏
  • 举报
回复
思路我早就知道,但就觉到很烦,并且感觉计算可能不准确,望高手指点!
wxshzf 2005-09-26
  • 打赏
  • 举报
回复
能给具体的代码吗?!
  • 打赏
  • 举报
回复
CTimeSpan类的东东,看看MSDN就非常明白了!
vcmute 2005-09-26
  • 打赏
  • 举报
回复
直接减月份
如果是月末的话要判断该月是否有该日,如2.30
wxshzf 2005-09-26
  • 打赏
  • 举报
回复
帮帮我吧?!
wxshzf 2005-09-26
  • 打赏
  • 举报
回复
大侠高手们请帮帮忙啊

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧