这个没看懂,求指导...

yaoweijq 2012-02-07 12:01:15
int nd, nm, ny; //new_day, new_month, new_year
int od, om, oy; //old_day, oldmonth, old_year

nm = (date2.month + 9) % 12;
ny = date2.year - nm/10;
nd = 365*ny + ny/4 - ny/100 + ny/400 + (nm*306 + 5)/10 + (date2.day - 1);

om = (this->month + 9) % 12;
oy = this->year - om/10;
od = 365*oy + oy/4 - oy/100 + oy/400 + (om*306 + 5)/10 + (this->day - 1);

return od - nd;

变量声明有点混乱,从某处直接拉过来的
大概意思是计算两个日期之间间隔的天数
不过这用的是啥算法?相当没有看懂,求详细解释
...全文
312 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Binzo 2012-02-09
  • 打赏
  • 举报
回复
看到的注释是中文
SunnyWun 2012-02-09
  • 打赏
  • 举报
回复
会用就好了
丰清云淡 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 nice_cxf 的回复:]

能想出这个办法求天数的真是人才
分别计算的是从当前时间到0年3月1日的天数
先判断是不是大于2月,小于2月年-1;
然后计算闰年
然后用306和5控制大小月,
[/Quote]
这个不是经典的算法吗?
cougar0709 2012-02-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 nice_cxf 的回复:]

能想出这个办法求天数的真是人才
分别计算的是从当前时间到0年3月1日的天数
先判断是不是大于2月,小于2月年-1;
然后计算闰年
然后用306和5控制大小月,
[/Quote]
这个正解!
newpuple 2012-02-08
  • 打赏
  • 举报
回复
没看懂什么意思,尤其是那个306

不过一般网络时间取的都是相对时间与1970.1.1或者1900.1.1之间的差,然后通过这个相对值计算得出的

估计这个也是这样做的
majia2011 2012-02-08
  • 打赏
  • 举报
回复
系统算天数,就是这么算得.............
lee_鹿游原 2012-02-07
  • 打赏
  • 举报
回复
感觉也不是什么算法吧,就是正常用变量求天数..
luciferisnotsatan 2012-02-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mapoor 的回复:]

C/C++ code

306 400 4 5 9 这些都是 魔法数,没法看
[/Quote]
ny/4 - ny/100 + ny/400
这几个应该是在算闰年。
其他的看不懂
mapoor 2012-02-07
  • 打赏
  • 举报
回复

306 400 4 5 9 这些都是 魔法数,没法看
  • 打赏
  • 举报
回复
建议楼主把代码贴全 这样看不出来啊
luciferisnotsatan 2012-02-07
  • 打赏
  • 举报
回复
看不懂。+9后%12,啥意思??
赵4老师 2012-02-07
  • 打赏
  • 举报
回复
COleDateTime
COleDateTimeSpan
面包大师 2012-02-07
  • 打赏
  • 举报
回复
//以上为0-2011年(不含2011)的天数
//306=365-31(一月)-28(二月);5=全年中不是31的月份的个数

我决定不牵强附会的去解释天才的算分了。。。解释不了
nice_cxf 2012-02-07
  • 打赏
  • 举报
回复
能想出这个办法求天数的真是人才
分别计算的是从当前时间到0年3月1日的天数
先判断是不是大于2月,小于2月年-1;
然后计算闰年
然后用306和5控制大小月,
面包大师 2012-02-07
  • 打赏
  • 举报
回复
nd = 365*ny + ny/4 - ny/100 + ny/400 + (nm*306 + 5)/10 + (date2.day - 1);
//365*ny按照非瑞年去计算天数(365*2011=734015)
//瑞年的计算公式,从元年到2011有多少瑞年?(ny/4 - ny/100 + ny/400 =487),所以加上
面包大师 2012-02-07
  • 打赏
  • 举报
回复
比如2012.2.7
nm = (date2.month + 9) % 12;//是否为瑞年的区别在二月,改值用来判断是否过完二月(nm=11)
ny = date2.year - nm/10;//若月份大于二,今年是不是瑞年也要去计算,否则不用(ny=2011)

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧