Re: [問題] 如何算出A日到B日之間有幾天?

看板Programming作者時間18年前 (2007/12/09 21:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串7/8 (看更多)
※ 引述《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 --
文章代碼(AID): #17M-SF00 (Programming)
討論串 (同標題文章)
文章代碼(AID): #17M-SF00 (Programming)