人類歷史上出現了很多種曆法。現行的公曆即格里曆由儒略曆改革而來。它是目前較為精確和規則簡明的一種曆法,約2023年誤差一日。因為閏年問題以及每個月的長度不等,仍然使得某些計算較為麻煩。比如:求兩個日期間差多少天。
下面的**實現了求兩個由公曆表示的日期間差多少天的功能。
其計算原理是先求出每個日期距離1年1月1日的天數差值,再進一步做差即可。
請研讀**,填寫缺失的部分。
把填空的答案(僅填空處的答案,不包括題面)存入考生資料夾下對應題號的「解答.txt」中即可。
struct mydate
;int getabsdays(mydate x)
;int year = x.year-1; // 因為欲求距離1年1月1日的距離
int days = year * 365 + year/4 - year/100 + year/400;
if(x.year%4==0 && x.year%100!=0 || x.year%400==0) month_day[1]++;
for(i=0; i<______________; i++)
days += month_day[i];
days += x.day-1;
return days;
}int getdiffdays(mydate a, mydate b)
int main(int argc, char* argv)
;mydate b = ;
int n = getdiffdays(a,b);
printf("%d\n", n);}
這還真是乙個比較好的演算法,要計算兩個日期的時間差,先計算每乙個日期到1年1月1日的時間,然後再計算這兩個天數的差值,這樣做思路特別清晰,因為不用考慮哪個年在前,哪個年在後的問題,在計算的時候,還有幾個我認為是亮點:
1.將每乙個月的天數存到乙個陣列當中,這樣做就不用使用n多的if了,不過其實有乙個優化的地方,就是12月份的天數其實不用存,因為計算的時候永遠也用不到這一天。
2.days = year * 365 + year/4 - year/100 + year/400;這句話用來計算n年距離1年的天數差,仍然寫的非常簡練,其中year/4 - year/100和year/400是閏年的天數
3.動態修改每個月的天數的陣列
看來可以考慮以後使用這種方法來計算了,我之前整理了一篇,那個還需要考慮正負之間的問題。
最後,那個空著的地方當然就是計算每個月的天數之和,不過,就像int year = x.year-1;這句話一樣,不要忘了是計算的差值,所以需要使用x.month-1才行。
計算兩個日期的天數問題
工程中,我們偶爾需要用到計算兩個日期之間的年 月 日數分別是多少。這時候有個簡單的方法而不是時間戳去轉化計算顯得格外重要。話不多說,上 1 獲取某一時間 預設為當前時間 若干年 月 日之後的時間nsdate 2 nsdate datewithfromdate nsdate nullable date...
計算兩個日期的時間間隔
計算兩個日期的時間間隔 第乙個日期和時間 第二個日期和時間 private string datediff datetime datetime1,datetime datetime2 說明 1.datetime 值型別代表了乙個從公元 0001年1 月1日0 點0分0 秒到公元 9999年12 月3...
計算兩個日期之間的天數
問題描述 給定兩個日期,計算相差的天數。比如2010 1 1和2010 1 3相差2天。時間限制 1000 記憶體限制 65536 輸入共兩行 第一行包含三個整數startyear,startmonth,startday,分別是起始年 月 日。第二行包含三個整數endyear,endmonth,en...