数学建模社区-数学中国

标题: 关于月份相加的算法! [打印本页]

作者: xShandow    时间: 2004-11-28 12:54
标题: 关于月份相加的算法!
<>月份相加,把我弄糊涂了.哪位大侠给解释一下.该如何加,才是最标准的?或是有思路就好.</P>
作者: ilikenba    时间: 2004-12-2 15:47
<>你所指的月份相加是不是要求出两个月相加后一共有多少天?</P>
作者: xShandow    时间: 2004-12-2 17:57
不是的,比如说现在是2004年2月29,我加几个月让他变为2005年2月份,由于2005年2月份是28天,那么这多余的一天如何计算,还有每加一个月,如何计算。。比如说。今天是1月31,我加一个月,那么结果又如何算,因为2月最大也就29天。。这个问题很困扰我啊。
作者: ilikenba    时间: 2004-12-2 18:06
<>那还是要加上天数吧?如果是加上几个月,因为月的天数都不同,怎样区分呢?</P>
作者: 无名    时间: 2004-12-2 20:26
//计算月末日期
! L$ b: M, ]( b! j% {1 a8 WCString CalcDate(const CString &amp; csOldDate, int nMonthInc)( ?( x* e/ P+ g4 {0 r
{
2 O9 E7 Q6 G) U# u/ a int nYear = atoi(csOldDate.Left(4));- w1 x" P, \9 K( Q7 u
int nMonth = atoi(csOldDate.Mid(4, 2));
4 f! W% ]2 t! ]( h- @ int nMonthTmp = nMonth + nMonthInc;                                //十进制的月
$ d' {8 y$ E% i  s" d nMonth = (nMonthTmp + 11) % 12 + 1;                                //十二进制的月- R% o' t; L. x8 c1 [
nYear += (nMonthTmp - nMonth) / 12;                                //年进(借)位7 c8 M1 R$ V( i3 d4 f
int nDay;
2 G# e3 a$ m4 j. G0 I1 Q% V switch(nMonth)$ h0 S* F" z. `4 r0 U7 q5 k- c8 _" I
{
0 D7 g3 q8 _1 L6 S7 d! n+ Z! y case 2:0 p  J, a3 o8 Y! w
  if((nYear % 400 == 0) || (nYear % 4 == 0 &amp;&amp; nYear % 100 != 0)) //闰年
. P0 F4 Q( D: V4 \5 {' I  {, e3 P8 w# G7 u5 i
   nDay = 29;
8 K3 O1 G) ~! k- z7 y2 {  }
$ U6 R/ S& K& k  P$ W' A& T, a8 P4 s; a  else
* N1 T1 M' ^& g; u, P  {
, {2 b, n7 l( h* B   nDay = 28;1 Z# X% e( U2 A# n" O2 p
  }
( ]( [1 S7 w" j4 e+ `4 q  break;8 D4 y. c% ~! Z% `7 Y
case 4:case 6:case 9:case 11:' d* \2 v( H2 e& P
  nDay = 30;
% d7 f2 w$ b2 g$ o  break;
6 ?5 k9 H, X3 F# R% v& L# c" U default:
3 \/ B' |4 \' Q* I* j* X; `  nDay = 31;
) p& H0 L6 {7 a, ?- O  break;
7 G0 m6 u" j. J! j! b }
' n, _6 K5 K1 c8 L! z( [ CString csNewDate;+ |. F, g/ S% w
csNewDate.Format("%04d%02d%02d", nYear, nMonth, nDay);0 E6 o. ?0 O# \2 {( a4 ~
return csNewDate;
- T+ z" K/ E7 m! U( \+ x}
作者: xShandow    时间: 2004-12-3 09:36
<>谢谢无名.</P><>我的算法和你又不一样.
& C- I) y$ o; X6 ^" u( H. b我是按加的月数,循环加的.# u) A- v9 }% \. p# u
每加一次判断:当前天是否大于当前月的天数,大于的话,当前天-当前月的天数,月数再加,如果月数大于12,月数=1,年数加1
* M0 ^  j1 u9 k7 D4 ^5 m9 l, u$ w& {每减一次判断:当前月是否小于1,小于,月数=12,年数减1,判断当前天数,当前天数是否大于当前月,是的,...就这样,反正就是烦,我也不知道这种算法是否科学.还请多讨论一下.嘿嘿!</P>
作者: ilikenba    时间: 2004-12-3 09:59
<>在C++Builder里面对于日期型已经重载了+,-的运算符了!可以直接用的!</P>
作者: xShandow    时间: 2004-12-3 14:43
关键是不能用VCL来作,这样一来,代码不对自己透明了.不知道能不能看到VCL的源码.
作者: GraBUAA    时间: 2012-4-2 19:31
帮顶一下~~~~~~




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5