伪代码如下,求高手指点。/// <summary>
/// 获取指定期间根据条件变化后的值
/// </summary>
/// <param name="currentPeriod">当前期间,值格式为 年*100+月</param>
/// <param name="yearCondition">年份条件,取值为所有整数</param>
/// <param name="monthCondition">月份条件,取值为所有整数</param>
/// <returns></returns>
public long GetPeriod(long currentPeriod, long yearCondition, long monthCondition)
{//获取指定期间同年上月 可写做 yearCondition=0,monthCondition=-1 //获取指定期间上年同期 可写做 yearCondition=-1,monthCondition=0
//也可写做 yearCondition=0,monthCondition=-13 return 0;
}
/// 获取指定期间根据条件变化后的值
/// </summary>
/// <param name="currentPeriod">当前期间,值格式为 年*100+月</param>
/// <param name="yearCondition">年份条件,取值为所有整数</param>
/// <param name="monthCondition">月份条件,取值为所有整数</param>
/// <returns></returns>
public long GetPeriod(long currentPeriod, long yearCondition, long monthCondition)
{//获取指定期间同年上月 可写做 yearCondition=0,monthCondition=-1 //获取指定期间上年同期 可写做 yearCondition=-1,monthCondition=0
//也可写做 yearCondition=0,monthCondition=-13 return 0;
}
{
long result;
long oldyear,oldmonth,newyear,newmonth;
long yearadd,monthadd;
yearadd=yearCondition+monthcondition/13;
monthadd=monthCondition%13;
oldyear=currentperiod/100;
oldmonth=currentperiod-oldyear*100;
newyear=oldyear+yearadd;
newmonth=oldmonth+monthadd;
result=newyear*100+newmonth;
return result;
}
{
long result; long year = currentperiod / 100;
long month = currentperiod % 100; year = year + yearCondition; long yearCount = monthCondition / 12; year = year + yearCount; if ((monthCondition % 12 + month) <= 0)
{
year = year - 1;
month = 12 + monthCondition % 12 + month;
}
else
{
if ((monthCondition % 12 + month) > 12)
{
year = year + (monthCondition % 12 + month) / 12;
month = ((monthCondition % 12 + month)) % 12;
}
else
{
month = monthCondition % 12 + month;
} }
result = year * 100 + month;
return result;
}
public long GetPeriod(long currentPeriod, long yearCondition, long monthCondition)
{
long result;
long oldyear,oldmonth,newyear,newmonth;
long yearadd,monthadd;
yearadd=yearCondition+monthcondition/12;
monthadd=monthCondition%12;
oldyear=currentperiod/100;
oldmonth=currentperiod-oldyear*100;
newyear=oldyear+yearadd;
newmonth=oldmonth+monthadd;
//新的月份算出来有可能不在1~12之间。
//这里要处理一下。
if(newmonth<=0)
{
newyear--;
newmonth+=12;
}
if(newmonth>12)
{
newyear++;
newmonth-=12;
}
//现在好了。去试一下。
result=newyear*100+newmonth;
return result;
}
不好意思,好久没上csdn,忘了帖子的事了。
我自己当时是这样实现的
static public long GetPeriod(long Period, string Year, string Month)
{
long result = 0; long year = Period / 100;
long month = Period % 100; long yearCondition = 0;
long monthCondition = 0; if (Year != "?")
{
yearCondition = long.Parse(Year);
year = year + yearCondition;
} if (Month != "?")
{
monthCondition = long.Parse(Month); //先将月折算到年
long yearCount = monthCondition / 12;
year = year + yearCount; #region 计算实际月份 if ((monthCondition % 12 + month) <= 0)
{
year = year - 1;
month = 12 + monthCondition % 12 + month;
}
else if ((monthCondition % 12 + month) > 12)
{
year = year + (monthCondition % 12 + month) / 12;
month = ((monthCondition % 12 + month)) % 12;
}
else
{
month = monthCondition % 12 + month;
} #endregion } result = year * 100 + month; return result; }