计算两个日期之间所间隔天数的快速算法

基本思路如下,以公元1年1月1日为起始日期,计算任意一个日期到它的日数是容易计算的,这样,我只要需要计算出两个需要计算的日期到公元1的所差天数就可以了。

 

int getDayCountFromAD1(int nY, int nM, int nD)

{

    const int MONTHDAY[] =

        {0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};

    const int MONTHDAYLEAP[] =

        {0, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335};

    int nDay = 0;

    nDay += ((nY % 4 ? 0 : (nY % 100 ? 1 : (nY % 400 ? 0 : 1)))

        ? MONTHDAYLEAP[nM] : MONTHDAY[nM]) + nD;

    nDay += --nY * 365 + nY / 4 - nY / 100 + nY / 400;

    return nDay;

}


/* input date format: YYYYMMDD, start and end date should > 20100101 */

/* example: getDayCountBetweenDate(20100710, 20100810) return 31 */

int getDayCountBetweenDate(int nStart, int nEnd)

{

    return getDayCountFromAD1(nEnd / 10000, nEnd % 10000 / 100, nEnd % 100)

        - getDayCountFromAD1(nStart / 10000, nStart % 10000 / 100, nStart % 100);

}

 

调用方法getDayCountBetweenDate(20000101, 20101001) 返回 3926,为2000-01-01 00:00到2010-10-01 00:00天数。

这段代码通过我的简单测试,在2000~2012年之间是正确的,如果需要更高使用范围的朋友可以用MFC那个时间跨度类来从1970年对比测一下。按我的感觉,如果对闰年的计算要求不高的话,在10000年内结果都是正确的。(目前闰年算法为4年一闰,100不闰,400闰)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值