Re: [問題] 如何算出A日到B日之間有幾天?
※ 引述《champavalon.bbs@ptt.cc (<品>)》之銘言:
> 但是若年份可在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■■■
--
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章