bool isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 计算某年某月某日是该年的第几天
int dayOfYear(int year, int month, int day) {
static int daysInMonth[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (isLeapYear(year)) daysInMonth[2] = 29;
int dayOfYear = 0;
for (int i = 1; i < month; ++i) {
dayOfYear += daysInMonth[i];
}
dayOfYear += day;
return dayOfYear;
}
// 计算两个日期之间相差的天数
int daysBetween(int year1, int month1, int day1, int year2, int month2, int day2) {
int days = 0;
if (year1 == year2) {
return dayOfYear(year2, month2, day2) - dayOfYear(year1, month1, day1);
}
days += 365 - dayOfYear(year1, month1, day1) + (isLeapYear(year1) ? 1 : 0);
for (int year = year1 + 1; year < year2; ++year) {
days += 365 + (isLeapYear(year) ? 1 : 0);
}
days += dayOfYear(year2, month2, day2);
return days;
}
// 计算两个日期之间相差的分钟数
int minutesBetween(int year1, int month1, int day1, int hour1, int minute1,
int year2, int month2, int day2, int hour2, int minute2) {
int days = daysBetween(year1, month1, day1, year2, month2, day2);
int minutes = days * 24 * 60;
minutes += (hour2 - hour1) * 60 + (minute2 - minute1);
return minutes;
}