C语言计算两个日期间隔天数

C语言计算两个日期间隔天数

代码

// An highlighted block
#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;
    /*用于判断日期是否大于3月(2月是判断闰年的标识),还用于纪录到3月的间隔月数*/
    m1 = (month_start + 9) % 12;
    /*如果是1月和2月,则不包括当前年(因为是计算到0年3月1日的天数)*/
    y1 = year_start - m1/10; 
    /*365*y1 是不算闰年多出那一天的天数, y1/4 - y1/100 + y1/400  是加所有闰年多出的那一天 
    (day_start - 1) 用于计算当前日到1日的间隔天数。*/
    d1 = 365*y1 + y1/4 - y1/100 + y1/400 + (m1*306 + 5)/10 + (day_start - 1);
    /*(m2*306 + 5)/10 用于计算到当前月到3月1日间的天数 306=365-31-28(1月和2月),5是全年中不是31天月份的个数*/
    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日的天数,然后相减,获取天数的间隔。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值