当前月份返回n个月的日子计算

本文介绍了一个简单的C++函数实现,用于计算从当前日期倒退指定数量的月份后的具体日期。通过考虑不同情况(如跨年倒退),该函数能够准确地返回所需日期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

晚上坐车到单位的路上,一直在想这个问题,本来想倒退几个月嘛,应该很容易,但是实际做起来,就稍微有点麻烦了,倒退几个月?一个两个?是否倒退到前一年去了,前n年去了,那天下午在些这个代码,晚上做公交车,在车上一直在想这个问题,等下车的时候,终于想出来。也许写的有点累赘。

    COleDateTime CSPI::Fun_PreTime(int year, int month, int pre_time)
{
  /*year:当前年份
    month:当前月份
    pre_time:向前返回的月的个数
    */
   COleDateTime time;
   int flag=month-pre_time;

   if (pre_time==1) {//如果是一个月的话,就是本月,当即返回
       time.SetDate(year,month,1);
       return time;
   }
   if (flag<0) {
       //出现12会在上一年的范围内,但是多于12个月的情况,就会到前一年,依次类推
       int pre_year=(int)((abs(flag)+12-1)/12);//上取整

           year=year-pre_year;
       
       if(abs(flag)<=12)//在两年的跨度范围之内
       {
           month=(month-pre_time)+13;
       }
       else//超出两年的跨度范围
       {
           if (abs(flag)%12!=0) {
               month=13-(int)(abs(flag)%12);
           }
           else if(abs(flag)%12==0)// 因为是倒数,正好12个月倒退到1月份
               month=1;
           //返回超过两年的月份
       }
       
       time.SetDate(year,month,1);
       return time;
   }else 
       time.SetDate(year,flag+1,1);
       return time;
  
}
程序如果将if分的细的话,执行效率会比较高。
也许vc++中有这样现成的函数。
呵呵,虽然很简单,些在着了,以备以后留用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值