数学建模社区-数学中国

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

作者: 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
//计算月末日期
3 i7 @) U+ n1 e' x% ?9 ACString CalcDate(const CString &amp; csOldDate, int nMonthInc)
1 _" R' F! P7 G. j" C( ?{
; Q9 r* w/ L5 A" z int nYear = atoi(csOldDate.Left(4));
+ [0 c# s5 e% J, x int nMonth = atoi(csOldDate.Mid(4, 2));
( Z8 p' ], E* Y3 u% D int nMonthTmp = nMonth + nMonthInc;                                //十进制的月6 ]: W+ [* X% C# z+ a0 B. p
nMonth = (nMonthTmp + 11) % 12 + 1;                                //十二进制的月
- V) b6 [# _0 K. e+ W nYear += (nMonthTmp - nMonth) / 12;                                //年进(借)位
# Q  D+ L/ _/ U+ |3 m& |; j$ r9 y3 G' a int nDay;0 q4 V! s% ^, y" X
switch(nMonth)4 G  t: R$ q2 O* Q2 _: M
{  P5 @8 c; j* I" w
case 2:
" v9 Q6 R4 a" h# X( x) \: D  if((nYear % 400 == 0) || (nYear % 4 == 0 &amp;&amp; nYear % 100 != 0)) //闰年
$ `$ q5 `8 u2 a! }  {% ]( R% W! W- O) U; K
   nDay = 29;% l; l4 y+ D' W' ^8 }- I* [7 A' d
  }) t0 U8 }0 S! X$ P) }( k4 E
  else( P$ M- |& D- x% x% P) H8 e7 E
  {0 P5 \$ X5 z! }& C/ U
   nDay = 28;
" |! u8 x2 {7 I# b! J8 w  }
% g5 C3 a3 w% I; C1 ?! G  break;
! h) \4 r8 l% b4 B* `/ R, R case 4:case 6:case 9:case 11:
8 v3 z, R% Z9 G0 v, W: ~! v  nDay = 30;2 r. O" G) j( `* D8 N3 b0 a
  break;7 E2 I& l/ [! h' h8 q$ {0 w
default:
' n4 d. |' R# `' d& k  nDay = 31;0 S$ i, g7 e# I' X1 Z
  break;
9 ]* N, A( s, W6 x  g }; I% l8 Q3 |8 T! H  Q
CString csNewDate;: c% X& q0 W* Z  @" j; O2 d
csNewDate.Format("%04d%02d%02d", nYear, nMonth, nDay);9 H9 Z* @$ z+ j
return csNewDate;7 X2 g- R( C, N, Z) U
}
作者: xShandow    时间: 2004-12-3 09:36
<>谢谢无名.</P><>我的算法和你又不一样.1 K. o5 ^0 W+ M7 U- z+ o1 D" o) n
我是按加的月数,循环加的.
* b" r/ O2 d0 a# }" ^每加一次判断:当前天是否大于当前月的天数,大于的话,当前天-当前月的天数,月数再加,如果月数大于12,月数=1,年数加1
5 F' X4 J- k* c7 J& ^- c6 R每减一次判断:当前月是否小于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