C++实现日期类

#include<iostream>
using namespace std;

class Date{
public:
	Date(int year=1996,int month=7,int day=30)
		: _year(year)
		, _month(month)
		, _day(day)
	{
		if (!((year > 0)
			&& (month > 0 && month<13)
			&& (day>0 && day < CheckDay(year,month)))){
			cout << "输入的日期不合法!" << endl;
		}
	}

	//判断是否闰年
	bool IsLeapYear(int year)
	{
		if ((0 == year % 4 && 0 != year / 100) || (0 == year % 400))
			return true;
		return false;
	}

	Date operator+(int days);//当前日期加n天后的日期
	Date operator-(int days);//当前日期减n天后的日期
	int operator-(const Date& d);//两个日期相隔的天数
	bool operator>(const Date& d);
	bool operator==(const Date& d)const;
	bool operator!=(const Date& d);
	Date& operator++();
	Date operator++(int); 
	Date& operator--();
	Date operator--(int);

	friend ostream& operator<<(ostream& _cout, const Date d){
		cout << "Date: " << d._year << "-" << d._month << "-" << d._day;
		return _cout;
	}

private:
	int CheckDay(int year,int month)
	{
		int Monthdays[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
		if (month == 2 && IsLeapYear(year)){
			return Monthdays[month] = 29;
		}
		else{
			return Monthdays[month];
		}
	}
private:
	int _year;
	int _month;
	int _day;
};

Date Date::operator+(int days){
	if (days<0){
		return *this - (0 - days);
	}
	Date temp(*this);
	temp._day += days;
	int Monthday = CheckDay(temp._year, temp._month);
	while (temp._day > Monthday){
		temp._day -= Monthday;
		temp._month++;
		if (temp._month > 12){
			temp._year++;
			temp._month = 1;
		}
	}
	return temp;
}

Date Date::operator-(int days){
	if (days < 0){
		return *this + (0 - days);
	}
	Date temp(*this);
	temp._day -= days;
	while (temp._day <= 0){
		temp._month -= 1;
		if (temp._month < 1){
			temp._year -= 1;
			temp._month = 12;
		}
		temp._day += CheckDay(temp._year, temp._month);
	}
	return temp;
}

int Date::operator-(const Date& d){
	Date minDate(*this);
	Date maxDate(d);
	if (minDate > maxDate){
		minDate = d;
		maxDate = *this;
	}
	int cout = 0;
	while (minDate != maxDate){
		cout++;
		++minDate;
	}
	return cout;
}

bool Date::operator>(const Date& d){
	if ((_year > d._year) ||
		(_year == d._year&&_month > d._month) ||
		(_year == d._year&&_month > d._month&&_day > d._day))
		return true;
	return false;
}

bool Date::operator==(const Date& d)const{
	return _year == d._year&&
		   _month == d._month&&
		   _day == d._day;
}

bool Date::operator!=(const Date& d){
	return !(*this == d);
}

Date& Date::operator++(){
	*this = *this + 1;
	return *this;
}

Date Date::operator++(int){
	Date temp(*this);
	*this = *this + 1;
	return temp;
}

Date& Date::operator--(){
	*this = *this - 1;
	return *this;
}

Date Date::operator--(int){
	Date temp(*this);
	*this = *this - 1;
	return temp;
}

void FunTest(){
	Date d1(1996, 9, 12);

	Date d2(d1);
	cout << d2 << endl;
	d2 = d1 + 10000;
	cout << d2 << endl;
	Date d3(d1);
	d3 = d1 - 100;
	cout << d3 << endl;
	Date d4(1996, 6, 4);
	int tmp = 0;
	tmp = d4 - d1;
	cout << tmp << endl;
}

int main(){
	FunTest();
	return 0;
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值