数学建模社区-数学中国

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

作者: 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
//计算月末日期
! j/ u5 z: r, N0 M3 ICString CalcDate(const CString &amp; csOldDate, int nMonthInc)
; [$ d9 b. V* {, F; x5 g{
- Z4 Z* `* i7 {/ z) U/ m9 m+ X int nYear = atoi(csOldDate.Left(4));" Y* H5 ]7 m9 ~3 v( D! W$ q
int nMonth = atoi(csOldDate.Mid(4, 2));
+ n7 ^' [/ S+ j! C- a. M& X int nMonthTmp = nMonth + nMonthInc;                                //十进制的月
- z% R8 g, ?' q0 E) C9 \ nMonth = (nMonthTmp + 11) % 12 + 1;                                //十二进制的月
7 {3 J+ D/ M, L* s; b) o* w9 O+ k1 g0 ~ nYear += (nMonthTmp - nMonth) / 12;                                //年进(借)位
9 ]) f4 m% T+ V int nDay;
6 j% u, |6 L% i1 N7 z switch(nMonth)# R; r/ O9 M: u
{7 h$ }. p- @! |# O, ^) \$ n
case 2:
9 ]! h: g9 X. z* O  if((nYear % 400 == 0) || (nYear % 4 == 0 &amp;&amp; nYear % 100 != 0)) //闰年( V  ]+ }) r, o2 a4 {9 ?0 T
  {8 C% W6 ]$ h" b* Z
   nDay = 29;
0 K6 t, p- A+ O  }# G9 o* s$ ~! U0 H
  else9 `+ K# T; X5 x7 y9 k- P/ H2 d, z4 h
  {
3 ], H; D" O2 [$ }9 q+ ~( R   nDay = 28;/ C5 b1 q( B8 n6 t; g$ u; Q! A
  }# \, S) g) x) d( W
  break;
& e" Y  d, Z+ _ case 4:case 6:case 9:case 11:
7 K: M( g9 z& S, g0 f  nDay = 30;& J2 L1 c- ]5 d2 K: X7 T
  break;+ p/ W2 J1 B- h9 {0 [; e6 [
default:% m: @% j0 h# H5 b0 s) w9 w
  nDay = 31;; q$ M5 _( `# U# u( ?
  break;
! i4 k7 M9 R7 b* V }
0 Y( a' O# \$ h  ?- W9 g5 r! \ CString csNewDate;7 H  x$ _9 ?* r6 s. f
csNewDate.Format("%04d%02d%02d", nYear, nMonth, nDay);
4 Q. h' z6 I. a0 @ return csNewDate;$ f; |* R% i) B
}
作者: xShandow    时间: 2004-12-3 09:36
<>谢谢无名.</P><>我的算法和你又不一样.
9 [1 C  W% ^% x: F我是按加的月数,循环加的.
+ f" B- V3 @1 l% e& G8 V; ]每加一次判断:当前天是否大于当前月的天数,大于的话,当前天-当前月的天数,月数再加,如果月数大于12,月数=1,年数加1
9 q) v0 z" `+ ]+ O2 @1 H每减一次判断:当前月是否小于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