14-求两个日期之间的天数

博客围绕C/CPP编程练习展开,指出编程时需考虑诸多细节,如是否同一年、同一月,是否为闰年以及是否有2月等,还感谢西交wrong学长提供题目练习。

需要考虑的细节比较多,例如:

1、是否同一年

2、是否同一月

3、是否为闰年

4、是否有2月


#include <iostream>

using namespace std;

int month[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

int main()
{
    int y1,m1,d1,y2,m2,d2;
    int res = 0;
    cin>>y1>>m1>>d1>>y2>>m2>>d2;
    if(y1 == y2)
    {
        if(m1 == m2)                    //同年同月日期相减
            res += d2-d1+1;
        else                            //同年不同月
        {
            for(int m=m1;m<m2;m++)    //先求m1和m2之间天数,含m1不含m2
            {
                if(m == 2)            //存在2月就判断是否加1
                {
                    if((y1%4 == 0 && y1%100 != 0) || y1%400 == 0)
                        res += 1;
                }
                res += month[m];
            }
            res = res-d1+1;      //将m1中天数减掉
            res += d2;                  //再加m2天数
        }
    }
    else
    {//不同年,先求中间年的天数
        for(int y=y1+1;y<y2;y++)
        {
            if((y%4 == 0 && y%100 != 0) || y%400 == 0)  //如果中间有闰年,多加一天
                res += 1;
            res += 365;
        }
        //求y1年剩余天数,注意从m1开始算
        for(int m=m1;m<=12;m++)
        {
            if(m == 2)
            {
                if((y1%4 == 0 && y1%100 != 0) || y1%400 == 0)
                    res += 1;
            }
            res += month[m];
        }
        res = res-d1+1;             //将d1日期减掉
        //求y2年到d2的天数
        for(int m=1;m<m2;m++)
        {
            if((y2%4 == 0 && y2%100 != 0) || y2%400 == 0)
                res += 1;
            res += month[m];
        }
        res += d2;
    }
    cout<<res<<endl;
    return 0;
}

(感谢西交wrong学长提供以上题目练习)

### 使用 `EXTRACT` 函数计算天数差 在 PostgreSQL 中,若需计算两个日期或时间戳之间天数差,可以使用 `EXTRACT` 函数结合 `EPOCH` 关键字,将时间戳转换为秒数后进行差值运算,并最终转换为天数。具体方法是将两个时间戳的 `EPOCH` 值相减,然后除以 86400(一天的秒数)以获得天数差。 ```sql SELECT (EXTRACT(EPOCH FROM end_timestamp) - EXTRACT(EPOCH FROM start_timestamp)) / 86400 AS days_diff FROM your_table; ``` 此查询返回两个时间戳之间的整数天数差。若需要保留小数部分(例如精确到小时或分钟),可以使用浮点除法: ```sql SELECT (EXTRACT(EPOCH FROM end_timestamp) - EXTRACT(EPOCH FROM start_timestamp)) / 86400.0 AS days_diff_with_time FROM your_table; ``` 该方法适用于需要精确到天数或更细粒度的时间差计算场景[^1]。 ### 使用 `AGE` 函数提取天数差 若希望以更可读的方式表示时间差,例如以 `INTERVAL` 类型返回年、月、日等信息,可以使用 `AGE` 函数。虽然 `AGE` 本身不直接返回天数差,但可以通过 `EXTRACT` 函数进一步提取天数部分。 ```sql SELECT EXTRACT(DAY FROM AGE(end_timestamp, start_timestamp)) AS days_diff FROM your_table; ``` 此方法适用于需要结合时间差的可读格式并提取其中天数部分的场景[^1]。 ### 在编程语言中计算天数差 在编程中,例如 Python,可以使用内置的 `datetime` 模块来计算两个日期之间天数差: ```python from datetime import datetime date1 = datetime(2023, 10, 1) date2 = datetime(2023, 10, 5) delta = date2 - date1 print(delta.days) # 输出天数差 ``` 该方法适用于在应用层处理日期差的场景,特别是在需要与数据库结果进行一致性比对时非常有用[^1]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值