数学建模社区-数学中国

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

作者: 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 |6 F( v8 Y- `2 `  S/ O& S- ^& ^; QCString CalcDate(const CString &amp; csOldDate, int nMonthInc)4 a, [" d6 O  Y( N
{
( u0 o0 c. _2 P# l( ^' Q* J& U! p int nYear = atoi(csOldDate.Left(4));
# R3 b; d5 e% \8 i+ E4 t int nMonth = atoi(csOldDate.Mid(4, 2));2 o/ k8 B) @- t$ z. N
int nMonthTmp = nMonth + nMonthInc;                                //十进制的月
/ u: R2 X  I% ^9 d" M  W$ i nMonth = (nMonthTmp + 11) % 12 + 1;                                //十二进制的月
+ `% k" }6 L3 C3 q' w) V% O nYear += (nMonthTmp - nMonth) / 12;                                //年进(借)位4 M& C8 A/ _/ h; ~2 L: v4 W
int nDay;4 U. w8 `7 h# O/ F
switch(nMonth)
+ ~9 j& [' R& f4 j- ?$ t6 [9 z& w {
6 E  f- l( C1 b9 i7 F case 2:
( X3 p6 b3 i2 j& W* R  if((nYear % 400 == 0) || (nYear % 4 == 0 &amp;&amp; nYear % 100 != 0)) //闰年
9 s/ t: _. G- Q/ X- J8 [0 X- @# |5 D  {
3 c+ K: S1 d. b! `# p# |4 R8 o: m& m   nDay = 29;
+ E8 G) t) X2 r0 p  }
' {! k4 r" s5 i, V7 H1 _  n4 F  else" h7 w* M% j9 S6 R# C
  {
, s4 Q# W, V$ P9 q8 [% j* y   nDay = 28;, h3 }$ v* z6 ^2 H! n- E1 p
  }
- a& `/ F! [% @( |  break;% `% x2 O3 v  J, o6 S+ f
case 4:case 6:case 9:case 11:
" h+ S! ~- e+ O  nDay = 30;
! E7 R6 A  N% [' `5 p  break;/ D( J- v2 R- V+ U
default:1 c" r2 [' m5 G: \+ Z
  nDay = 31;
0 ^  g9 ]$ m  w. O, z0 i  break;
* r9 I1 G, Z+ O% P/ c }4 [1 F, K$ B+ V4 Y5 i: l( m7 ~7 }
CString csNewDate;
4 j6 @" ~+ c( a csNewDate.Format("%04d%02d%02d", nYear, nMonth, nDay);
& i3 ]4 i5 a& g) k/ t- q% B return csNewDate;
  P$ k4 u  P% P}
作者: xShandow    时间: 2004-12-3 09:36
<>谢谢无名.</P><>我的算法和你又不一样.
3 |2 N7 U! a3 n) L我是按加的月数,循环加的.- N# G6 c- r& k; w) F
每加一次判断:当前天是否大于当前月的天数,大于的话,当前天-当前月的天数,月数再加,如果月数大于12,月数=1,年数加1
/ i  M1 x" P9 M, x7 c3 C每减一次判断:当前月是否小于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