下面是“C++实现两个日期间差多少天的解决方法”的完整攻略。
一、问题描述
假设有两个日期,分别为 start_date
和 end_date
,请实现一个函数,计算两个日期间相隔的天数。
二、解决思路
我们可以将日期转化为距离某个固定日期的天数,然后求两个日期距离固定日期的天数之差。这里我们取 1900年1月1日
作为固定日期。
将日期转化为天数的方法:假设输入日期为 y1-m1-d1
,那么这个日期距离 1900年1月1日
的天数可表示为 day1 = (y1-1900)*365 + leap_years(y1) + month_days[m1-1] + d1 - 1
。其中,leap_years(y)
用于计算从1900年到y年之间有多少个闰年, month_days
则表示每个月的天数,需要根据闰年和平年进行调整。
三、示例代码
#include <iostream>
using namespace std;
int month_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; // 每个月的天数
int leap_month_days[12] = {31,29,31,30,31,30,31,31,30,31,30,31}; // 闰年每个月的天数
// 计算从1900年到y之间的闰年数
int leap_years(int y) {
return (y - 1900) / 4 - (y - 1900) / 100 + (y - 1600) / 400;
}
// 判断是否是闰年
bool is_leap_year(int y) {
return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}
// 计算日期距离1900年1月1日的天数
int days(int y, int m, int d) {
int total_days = (y - 1900) * 365; // 距离1900年1月1日的总天数
total_days += leap_years(y); // 加上闰年数
for (int i = 0; i < m - 1; i++) {
if (is_leap_year(y)) {
total_days += leap_month_days[i]; // 闰年月份天数累加
} else {
total_days += month_days[i]; // 平年月份天数累加
}
}
total_days += d - 1; // 加上当前月份天数
return total_days;
}
// 计算两个日期的差值
int date_diff(int y1, int m1, int d1, int y2, int m2, int d2) {
int days1 = days(y1, m1, d1);
int days2 = days(y2, m2, d2);
return days2 - days1;
}
int main() {
int start_year, start_month, start_day, end_year, end_month, end_day;
cout << "请输入开始日期(年 月 日,以空格分隔):" << endl;
cin >> start_year >> start_month >> start_day;
cout << "请输入结束日期(年 月 日,以空格分隔):" << endl;
cin >> end_year >> end_month >> end_day;
int diff = date_diff(start_year, start_month, start_day, end_year, end_month, end_day);
cout << "相差天数为:" << diff << " 天" << endl;
return 0;
}
示例输入1:
请输入开始日期(年 月 日,以空格分隔):
2021 7 1
请输入结束日期(年 月 日,以空格分隔):
2021 7 10
示例输出1:
相差天数为:9 天
示例输入2:
请输入开始日期(年 月 日,以空格分隔):
2021 12 31
请输入结束日期(年 月 日,以空格分隔):
2022 1 1
示例输出2:
相差天数为:1 天
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现两个日期间差多少天的解决方法 - Python技术站