首页 > 编程语言 > 详细

实现 日期 的运算---C++

时间:2015-12-03 17:13:15      阅读:223      评论:0      收藏:0      [点我收藏+]

#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>

#include<assert.h>

using namespace std;

class Date

{

public:

void display()

{

cout << _year << "-" << _month << "-" << _day << endl;

}

bool IsLeapyear(int year)

{

return ((year / 400 == 0) || (year / 4 == 0 && year / 100 != 0));

}

int GetMonthDay(int year, int month)

{

if (month > 12 || month < 1)

{

printf("无此月\n");

return -1;

}

else

{

int dayarr[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

if (IsLeapyear(year) && month == 2)

{

return 29;

}

else

{

return dayarr[month - 1];

}

}

}

Date& operator+(const int day)

{

if (day < 0)

{

return *this - (-day);

}

else

{

_day += day;

while (_day > GetMonthDay(_year, _month))

{

_day -= GetMonthDay(_year, _month);

if (_month == 12)

{

_year += 1;

_month = 1;

}

else

{

_month += 1;

}

}

}

return *this;

}

Date& operator-(int day)

{

if (day < 0)

{

return *this + (-day);

}

else

{

_day -= day;

while (_day <= 0)//注意   等于    的时候

{

if (_month == 1)

{

_year -= 1;

_month = 12;

}

else

{

_month -= 1;

}

_day += GetMonthDay(_year, _month);

}

}

return *this;

}

Date operator++(int day)//后置加加

{

Date tem = *this;

*this = *this + 1;

return tem;

}

Date& operator++()//前置加加

{

*this = *this + 1;

return *this;

}

Date& operator--(int day)//后置减减

{

Date tem = *this;

*this = *this - 1;

return tem;

}

Date& operator--()//前置减减

{

*this = *this - 1;

return *this;

}

Date& operator+=(const int day)

{

*this = *this + day;

return *this;

}

Date& operator-=(const int day)

{

*this = *this - day;

return *this;

}

bool operator>(const Date& cur)

{

if (_year > cur._year)

{

return 1;

}

else if (_year == cur._year)

{

if (_month > cur._month)

{

return 1;

}

else if (_month == cur._month)

{

if (_day > cur._day)

{

return 1;

}

}

}

return 0;

}

bool operator==(const Date& cur)

{

if (_year == cur._year

&& _month == cur._month

&& _day == cur._day)

{

return 1;

}

else

{

return 0;

}

}

bool operator<(const Date& cur)

{

if (!(*this > cur || *this == cur))

{

return 1;

}

else

{

return 0;

}

}

bool operator>=(const Date& cur)

{

if (*this > cur || *this == cur)

{

return 1;

}

else

{

return 0;

}

}

bool operator<=(const Date& cur)

{

if (*this < cur || *this == cur)

{

return 1;

}

else

{

return 0;

}

}

int operator-(const Date& cur)

{

int count = 0;

Date max;

Date min;

if (*this > cur)

{

max = *this;

min = cur;

}

else if (*this < cur)

{

max = cur;

min = *this;

}

else

{

return 0;

}

while (1)

{

if (min == max)

{

return count;

}

else

{

min = min + 1;

count++;

}

}

}

public:

Date(int year = 1990, int month = 1, int day = 1)

:_year(year)

, _month(month)

, _day(day)

{}

Date(const Date& a)

:_year(a._year)

,_month(a._month)

, _day(a._day)

{}

~Date()

{}

Date& operator=(const Date& cur)

{

_year = cur._year;

_month = cur._month;

_day = cur._day;

return *this;

}

private:

int _year;

int _month;

int _day;

};

//operator+ operator-

//operator++ operator--

//operator+= operator-=

void test1()

{

Date cur(2015, 11, 11);

//(cur + 18).display();

//(cur + 19).display();

//(cur + 20).display();

//(cur + (-30)).display();

//(cur - 10).display();

//(cur - 11).display();

//(cur - 12).display();

//(cur - (-18)).display();

}

//operator>  <  ==  >=  <=

void test2()

{

Date cur1(2015, 11, 13);

Date cur2(2015, 11, 12);

cout << (cur1 > cur2) << endl;

cout << (cur1 == cur2) << endl;

}

//operator-(const Date& cur)

void test3()

{

Date date1(2015, 11, 11);

Date date2(2015, 11, 1);

Date date3(2015, 11, 22);

cout << date1 - date2 << endl;

cout << date1 - date3 << endl;

}

int main()

{

//test1();

//test2();

test3();

system("pause");

return 0;

}


本文出自 “水仙花” 博客,请务必保留此出处http://10704527.blog.51cto.com/10694527/1719279

实现 日期 的运算---C++

原文:http://10704527.blog.51cto.com/10694527/1719279

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!