asp.net C中時間日期計算代碼

來源:互聯網
上載者:User

【輸出】每組資料輸出一行,即日期差值

【範例輸入】2011041220110422

【範例輸出】11

很簡單的一道題目,思路很簡單,計算兩個日期分別到1年1月1日間隔的天數,然後相減加一即可。計算到00010101的間隔天數包含了如下日期計算常見的一些內容。

閏年判斷 運算式

根據格里曆:平年365日,閏年366日;但四年之閏餘,僅23時15分4秒,閏一日,未免過多,超過之44分56秒,積至二十五閏,為17時58分24秒,約合一日之3/4,故每滿百年廢一閏,至第400年又不廢。

判斷閏年的運算式如下(C語言版)

 代碼如下 複製代碼

!(y%400)||(!(y%4)&&y%100))

 

y%4?0:(y%100?1:(y%400?0:1))

計算距公元1年1月1日天數

首先使用數組索引前幾個月天數,並加上當月天數,如果是月份大於3且閏年(注意判斷順序,利用||的短路)則加上1天,然後加上之前年份的總天數,這裡利用運算式r+=--y*365+y/4-y/100+y/400; 來計算。

 代碼如下 複製代碼

int R[]={0,31,59,90,120,151,181,212,243,273,304,334};
int calc(int y){
    int m=y%10000/100;
    int r=R[m-1]+y%100;
    y/=10000;
    r+=(m>2&&(!(y%400)||(!(y%4)&&y%100)))?1:0;
    r+=--y*365+y/4-y/100+y/400;
    return r;
}

原題程式碼如下:

 代碼如下 複製代碼

#include<stdio.h>
int R[]={0,31,59,90,120,151,181,212,243,273,304,334};
int calc(int y){
    int m=y%10000/100;
    int r=R[m-1]+y%100;
    y/=10000;
    r+=(m>2&&(!(y%400)||(!(y%4)&&y%100)))?1:0;
    return r+--y*365+y/4-y/100+y/400;
}
int main(){
    int x,y;
    while(scanf("%d%d",&x,&y)!=EOF)printf("%dn",calc(y)-calc(x)+1);
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.