博客
关于我
日期类
阅读量:229 次
发布时间:2019-03-01

本文共 4928 字,大约阅读时间需要 16 分钟。

#include 
using namespace std;class Date {public: Date(int year = 1, int month = 1, int day = 1) { if (year > 0 && month > 0 && month <= 12 && day > 0 && day <= getMonthDay(year, month)) { _year = year; _month = month; _day = day; } else { cout << "日期不合法 : " << year << "-" << month << "-" << day << endl; cout << "重置为默认值 : 2000-1-1" << endl; _year = 2000; _month = 1; _day = 1; } } Date(const Date& d) { _year = d._year; _month = d._month; _day = d._day; } Date& operator=(const Date& d) { if (this == &d) return *this; this->_year = d._year; this->_month = d._month; this->_day = d._day; return *this; } ~Date() { } int getMonthDay(int year, int month) { static int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int day = days[month]; if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) day++; return day; } Date& operator+=(int day) { if (day < 0) return *this -= -day; _day += day; while (_day > getMonthDay(_year, _month)) { _day -= getMonthDay(_year, _month); _month++; if (_month == 13) { _month = 1; _year++; } } return *this; } Date operator+(int day) { Date ret(*this); ret += day; return ret; } Date operator-(int day) { Date ret = *this; ret -= day; return ret; } Date& operator-=(int day) { if (day < 0) return *this += -day; _day -= day; while (_day <= 0) { _month--; if (_month == 0) { _month = 12; _year--; } _day += getMonthDay(_year, _month); } return *this; } Date& operator++() { return *this += 1; } Date operator++(int) { Date ret(*this); *this += 1; return ret; } Date operator--(int) { Date ret(*this); *this -= 1; return ret; } Date& operator--() { return *this -= 1; } bool operator>(const Date& d) { if (_year > d._year) return true; else if (_year == d._year) { if (_month > d._month) return true; else if (_month == d._month) { return _day > d._day; } } return false; } bool operator==(const Date& d) { return _year == d._year && _month == d._month && _day == d._day; } bool operator>= (const Date& d) { return (*this > d) || (*this == d); } bool operator< (const Date& d) { return !(*this > d); } bool operator<= (const Date& d) { return !(*this > d); } bool operator!= (const Date& d) { return !(*this == d); } int operator-(const Date& d) { Date d1(*this); Date d2(d); int num = 0; if (d1 > d2) { while (d1 > d2) { d2++; num++; } return num; } else { while (d1 < d2) { d1++; num++; } return -num; } } void printD() { cout << _year << "-" << _month << "-" << _day << endl; }private: int _year; int _month; int _day;};void test() { Date d(2020, 5, 20); d.printD(); d += 10; d.printD(); d += 10; d.printD(); Date d2(2020, 12, 6); d2.printD(); d2 += 90; d2.printD(); d2 += 3650; d2.printD(); ++d2; d2.operator++(); d2.printD(); d2.operator++(0); d2.printD(); d2++; d2.printD();}void test2() { Date d1(2020, 5, 24); d1.printD(); d1 -= 30; d1.printD(); d1 -= -30; d1.printD(); d1 -= 3650; d1.printD(); d1 += -3650; d1.printD();}void test3() { Date d1(2020, 5, 25); Date d2(d1); Date d3(d1); Date d4(2020, 5, 23); cout << (d1 > d4) << endl; cout << (d1 < d4) << endl; cout << (d1 <= d4) << endl; cout << (d3 > d1) << endl; cout << (d1 >= d1) << endl; cout << (d1 == d2) << endl; cout << (d1 != d2) << endl;}void test4() { Date d1(2020, 5, 25); Date d2(2020, 5, 25); Date d3(2020, 5, 26); Date d4(2020, 5, 23); cout << (d1 > d4) << endl; cout << (d1 < d4) << endl; cout << (d1 <= d4) << endl; cout << (d3 > d1) << endl; cout << (d1 >= d1) << endl; cout << (d1 == d2) << endl; cout << (d1 != d2) << endl;}void test5() { Date d1(2020, 5, 25); Date d2 = d1 + 3650; cout << (d1 - d2) << endl; cout << (d2 - d1) << endl; Date d3 = d2 + 189; cout << (d2 - d3) << endl; cout << (d3 - d2) << endl;}int main() { test(); test2(); //test3(); //test4(); //test5(); return 0;}

转载地址:http://aunv.baihongyu.com/

你可能感兴趣的文章
Python单元测试框架
查看>>
python单元测试之unittest
查看>>
Python单元测试unittest实战
查看>>
Python单元测试-模拟VS补丁
查看>>
python协程实时输出_Python 协程以及事件循环的问题,怎么知道 IO 读取结束了呢?...
查看>>
Python十进制&;包提供错误的结果
查看>>
Python化身“安全老中医”:一键搞定工控系统漏洞,从零基础到精通,收藏这篇就够了!
查看>>
Python加速运行技巧
查看>>
python办公自动化基础遍历文件夹
查看>>
python办公自动化基础输出文件和文件夹
查看>>
python办公自动化基础搜索文件
查看>>
python知识:@classmethod和@staticmethod的异同
查看>>
python前端之css
查看>>
Python制作进度条,原来有这么多方法
查看>>
Python制作简单的学生成绩管理系统
查看>>
python制作甘特图的基本知识(附Demo)
查看>>
python制作一个简单的服务器,【Python】 做一个简单的 http 服务器
查看>>
Python到底能做什么?它的优点在哪?
查看>>
python利用pytorch库导出图像分割算子
查看>>
python利用pyshark监听网卡来抓包其中pyshark中摸索的一些可用参数
查看>>