C++ 计算任意两个日期之间的天数

C++写的一个计算两个日期之间天数的小程序:

#include <Windows.h>
#include <stdio.h>


struct tagDate
{ 
	int year;
	int month;
	int day;
};

//设置日期
void SetDate(int y, int m, int d, tagDate *date)
{ 
	date->year = y;
	date->month = m;
	date->day = d;
} 

//是否闰年
int IsLeapYear(int year)  
{ 
	return ((year%4==0) && (year%100!=0)||year%400==0); 
} 

//得到date.month的最大天数
int GetLastDay(tagDate date) 
{ 
	int num;
	switch(date.month) 
	{
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
		num=31;
		break;
	case 2:
		num = 28+IsLeapYear(date.year); 
		break; 
	default: 
		num = 30; 
	} 
	return num; 
}

//日期是否合法
int IsDateValid(tagDate date)
{ 
	if(date.year <0 || date.month <1 || date.month> 12) 
		return 0;

	if(date.day <1 || date.day> GetLastDay(date))
		return 0;

	return 1;
} 

//date+1
void AddDay(tagDate *date)
{
	date->day++;
	if(date->day > GetLastDay(*date))
	{
		date->day = 1;
		date->month++;
		if(date->month > 12)
		{
			date->month = 1;
			date->year++;
		}
	}
}

//date1比date2小返回值为1,否则为0
int Compare(tagDate date1, tagDate date2)
{
	if(date1.year < date2.year)
		return 1;
	if(date1.year <= date2.year && date1.month < date2.month)
		return 1;
	if(date1.year <= date2.year && date1.month <= date2.month && date1.day < date2.day)
		return 1;

	return 0;
} 
//计算两个日期的间隔天数
long DateDiff(tagDate date1, tagDate date2)
{
	long delta = 0;
	tagDate date3;
	//若date1 > date2,交换date1,date2
	if(!Compare(date1, date2))
	{
		date3 = date2;
		date2 = date1;
		date1 = date3;
	}

	//date1比date2少时,date1日期加1
	while(Compare(date1,date2))
	{
		AddDay(&date1);
		delta++;
	}
	return delta;
} 

void main()
{
	tagDate date1, date2;
	int y, m, d;
	
	system("cls");
	while(1)
	{
		puts("\nInput   date1\t ");
		scanf("%d,%d,%d", &y, &m, &d);
		SetDate(y, m, d, &date1);
		if(!IsDateValid(date1))
		{ 
			puts( "date1   is   invalid !");
			exit(1);
		}

		puts("\nInput   date2\t ");
		scanf("%d,%d,%d", &y, &m, &d);
		SetDate(y, m, d, &date2);
		if(!IsDateValid(date2))
		{
			puts( "date2   is   invalid !");
			exit(1);
		}
		//
		printf("\nResult : [%ld]", DateDiff(date1,date2));
	}
}

 

 

 

 

  • 17
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
可以使用以下的代码来计算两个日期之间天数(假设日期以整数形式给出,如20210727代表2021年7月27日): ```c++ #include <iostream> using namespace std; int daysBetween(int year1, int month1, int day1, int year2, int month2, int day2) { int days = 0; int monthDays[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; for (int i = year1; i < year2; i++) { if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) { days += 366; } else { days += 365; } } if ((year2 % 4 == 0 && year2 % 100 != 0) || year2 % 400 == 0) { monthDays[2] = 29; } for (int i = 1; i < month1; i++) { days -= monthDays[i]; } days -= day1; for (int i = 1; i < month2; i++) { days += monthDays[i]; } days += day2; return days; } int main() { int year1, month1, day1; int year2, month2, day2; cin >> year1 >> month1 >> day1; cin >> year2 >> month2 >> day2; cout << daysBetween(year1, month1, day1, year2, month2, day2) << endl; return 0; } ``` 在上述代码中,我们定义了一个`daysBetween`函数,该函数接受6个参数:起始日期的年、月、日和结束日期的年、月、日。函数返回起始日期与结束日期之间天数。 函数的实现中,我们首先计算起始日期与结束日期之间的整年天数。对于每一年,我们判断其是否为闰年,并根据是否为闰年来累加该年的天数。然后,我们再计算出起始日期与年底之间天数以及结束日期与年初之间天数,并将它们相加作为结果返回。需要注意的是,我们需要先判断结束日期所在的年份是否为闰年,如果是,将2月份的天数设置为29天。 最后,在`main`函数中,我们读入起始日期和结束日期,并调用`daysBetween`函数计算它们之间天数,并将结果输出。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellokandy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值