計算兩個日期之間的天數


layout: post
title: 計算兩個日期之間的天數
date: 2018-04-19 23:20:42 +0800
group:
tags: 代碼


#計算兩個日期之間的天數#

#include <stdio.h>
#include <stdlib.h>
int day_diff(int year_start, int month_start, int day_start
            ,int year_end, int month_end, int day_end)
{

    int y2, m2, d2;  
    int y1, m1, d1;  
    m1 = (month_start + 9) % 12;  
    y1 = year_start - m1/10;  
    d1 = 365*y1 + y1/4 - y1/100 + y1/400 + (m1*306 + 5)/10 + (day_start - 1);  
    m2 = (month_end + 9) % 12;  
    y2 = year_end - m2/10;  
    d2 = 365*y2 + y2/4 - y2/100 + y2/400 + (m2*306 + 5)/10 + (day_end - 1);  
    return (d2 - d1);  
}  

int main(void)  
{  
     printf("%d\n", day_diff(2015, 1, 1, 2015, 1, 8));  
     printf("%d\n", day_diff(2015, 1, 29, 2015, 2, 9));  
     return 0;  
}  

算法解析:
該算法總體思想是計算給定日期到 0年3月1日的天數,然後相減,獲取天數的間隔。
m1 = (month_start + 9) % 12; 用於判斷日期是否大於3月(2月是判斷閏年的標識),還用於紀錄到3月的間隔月數。
y1 = year_start - m1/10; 如果是1月和2月,則不包括當前年(因爲是計算到0年3月1日的天數)。
d1 = 365y1 + y1/4 - y1/100 + y1/400 + (m1306 + 5)/10 + (day_start - 1);
其中 365y1 是不算閏年多出那一天的天數,
y1/4 - y1/100 + y1/400 是加所有閏年多出的那一天,
(m2
306 + 5)/10 用於計算到當前月到3月1日間的天數,306=365-31-28(1月和2月),5是全年中不是31天月份的個數
(day_start - 1) 用於計算當前日到1日的間隔天數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章