看板Programming
标 题Re: [问题] 如何算出A日到B日之间有几天?
发信站KKCITY (Sun Dec 9 20:34:02 2007)
转信站ptt!ctu-reader!ctu-gate!news.nctu!news.ntu!news.au!zoonews.ee.ntu!news
※ 引述《[email protected] (<品>)》之铭言:
> 但是若年份可在1000~3000年的范围内
> (举例: 20371215和19100824相差几天??)
> 就没办法存下这麽大的数字了
> 在需要考虑闰年的情况下
> 是否有不用<time.h>中函式的方法呢?
> 不然若硬干
> 应该後果会很糟= =
time.h里面的time_t就是int,大部分现有系统都还是32-bit integer
所以time_t就只能对应到[1903, 2037]而已,的确是算不到1000到3000
解决方法也是很简单
1: 改用64-bit integer的系统和compiler:最简单的想法,但是不一定能贯彻
2: 使用其他在这方面比较周到的lib或语言工具,不局限在C++ lib
3: 自己implement:
其实也很简单,跟算星期几公式比起来,算日数是很单纯的
要考虑的只有几点
1)一月到十二月日数对照:这建个表就好
2)闰年问题:简单规则,四除尽为闰,四百除尽不闰
3)1582年历制改革:为了修正当时历制的误差,1582年10月4日到10月15日
之间的10天是跳过的,也就是说10/4/1582 是星期四,10/15/1582就是星
期五。这11天在历史上是不存在的,如果算过这一段要减掉。也就是说你
自己implement的函数要符合这样
datediff(date_t(1582,10,4), date(1582,10,15)) == 1
才是正确。
--
X-URL1: http://www.aviationnow.com/ ‧李登辉=格达费=外星人‧有厕
检举匪谍 人人有责 ⊙ 检举匪谍 安居乐业 人所
检举匪谍渗透破坏 人人安居乐业|肃清贪污经济犯罪 社会繁荣进步
破案奖金三百万|知情不报判徒刑
检举要件:请用真实姓名、地址,受理机关绝对保密
X-Disclaimer: 李登辉一定是外星人! Mk.22 Mod4 5/15/01 Mod3 6/9/98
--
┌─────◆KKCITY◆─────┐ ■ KKBOX 可立刻 听音乐 ■
│ bbs.kkcity.com.tw │ ■■所有想找的歌通通不必等 ■■
└──《From:59.115.205.234
》──┘ ■■■http://www.kkbox.com.tw■■■
--