两个日期之间的天数--【编程珠玑】

被csdn各种大牛打击的...继续加油...

今天翻了下《编程珠玑》,其实这本书感觉对自己还是有点深,吃不透啊。

看到一题,有一小问是给定两个日子,计算这两个日子的天数;

碰巧前几天做web作业也有差不多这题的,不过那一题直接调用系统函数的,两个日期一减/1000/60/60/24就是天数了;

c中还真不知道有没有这样强大的函数,如果有,各位告诉我一下;

说一下我实现的吧,给了两个日期,分别求出由公元元年开始过的天数,然后相减,即是相差的天数(正负不计较,大家都明白的);

/**********
* 2013-12-30
* _Luffy
* http://blog.youkuaiyun.com/xjm199
***********/
#include <stdio.h>

int isleapyear(int year)  //是否是闰年
{
    return ((year % 4 == 0 && year % 100 != 0)|| year % 400 == 0);
}

int sum(int year, int month, int day)
{
    int mon[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int sum = (year - 1) * 365;  //自公元1年来的天数
    int i;

    sum += (year - 1) / 4 + 1;  //能被4整除的都加上
    sum -= (year - 1) / 100 + 1;  //其中被100整除的不是闰年
    sum += (year - 1) / 400 + 1;  //实际上能被400整除的即为闰年

    for(i = 0; i < month - 1; ++i)  //将本年的剩下的整月加上
       sum += mon[i];

    if(isleapyear(year) == 1 && month > 2)  //本年是否闰2月
       ++sum;

    sum += day;  //本月的日子加上

    return sum;
}


int main()
{
    printf("%d\n", sum(2013, 11, 1) - sum(2013, 9, 30));

    return 0;
}

sum中求得的就是由公元元年以来的日子;

结果如下:

32

Process returned 0 (0x0)   execution time : 0.331 s
Press any key to continue.

 

小工程可见:http://download.youkuaiyun.com/detail/xjm199/6790267


欢迎各位提点...o(∩_∩)o

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值