计算两个日期相差天数的最简洁的代码

本文介绍了如何用C语言计算两个日期相差的天数,重点解析了一个算法,该算法巧妙地处理了闰年和不同月份天数的问题,通过位移运算提高效率,并给出具体代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标

1. 求解两个日期相差的天数。

2. 获取每个月的天数。

代码 1

该算法先根据年月日求出该日期距离 0001年1月1日 的总天数,然后两个天数直接相减,即可求出相差的天数。

先贴出来代码:

// 计算日期差
// 编译环境:VS2017,C++ 语言
//
#include <stdio.h>

// 计算从 0001-1-1 起的天数
int countdays(int y, int m, int d)
{
    if (m < 3)    y--, m += 12;
    return 365 * y + (y >> 2) - y / 100 + y / 400 + (153 * m - 457) / 5 + d - 306;
}

int main()
{
    // 输入目标日期
    int year, month, day;
    scanf_s("%d-%d-%d", &year, &month, &day);

    // 输出当前日期与 1949-10-1 相差的天数
    printf("%d\n", countdays(year, month, day) - countdays(1949, 10, 1));

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值