c++计算天数(不用函数)
时间: 2024-09-07 18:05:01 浏览: 55
年龄天数的计算(C++)
在C++中,计算两个日期之间相差的天数通常会涉及一些日期处理技巧,因为单纯的加减运算可能无法准确考虑到每个月份的不同天数。以下是一种手动实现的方式,不依赖于特定库,但比较繁琐:
```cpp
#include <iostream>
// 定义一个结构体模拟日期
struct Date {
int day;
int month;
int year;
// 判断是否是闰年
bool is_leap_year() {
if (year % 4 != 0)
return false;
else if (year % 100 == 0)
return year % 400 == 0;
else
return true;
}
// 计算该月有多少天
int days_in_month() {
switch (month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
return 31;
case 4: case 6: case 9: case 11:
return 30;
default: // 二月
return is_leap_year() ? 29 : 28;
}
}
};
// 计算两个Date对象之间的天数差
int days_between_dates(Date& startDate, Date& endDate) {
int yearsDiff = endDate.year - startDate.year;
int monthsDiff = endDate.month - startDate.month;
// 如果月份差是负的,则需要考虑上个月的情况
if (monthsDiff < 0) {
startDate.month += 12;
yearsDiff--;
monthsDiff++;
}
// 然后加上剩余的天数差
int daysDiff = endDate.day - startDate.day;
while (daysDiff < 0) {
daysDiff += startDate.days_in_month();
startDate.day = 1;
startDate.month++;
// 考虑闰年的影响
if (startDate.is_leap_year() && startDate.month > 2) {
startDate.days_in_month -= 1; // 二月减少一天
}
monthsDiff++;
if (monthsDiff > 12) { // 滞后的月份超过了12个,需要回到下一年
startDate.year++;
monthsDiff -= 12;
}
}
return yearsDiff * 365 + (yearsDiff / 4) - (yearsDiff / 100) + (yearsDiff / 400) + monthsDiff * 30 + daysDiff;
}
int main() {
// 创建日期对象并设置初始值
Date date1 = {1, 7, 1921};
Date date2 = {1, 1, 2020};
int difference = days_between_dates(date1, date2);
std::cout << "相差了 " << difference << " 天.\n";
return 0;
}
```
注意,这个示例仅适用于公历,且不考虑季节变化(如冬至夏至等)。在实际应用中,可能需要引入更复杂的日期处理库来获得更准确的结果。
阅读全文