C++ 自定义日期类实现日期的加减算法
来源:互联网 发布:彗星dns优化器官方 编辑:程序博客网 时间:2024/05/18 23:57
#include<iostream>using namespace std;class Date{private:int m_year,m_month,m_day;int m_totalDaysYear;public:Date(int year=2001,int month=1,int day=1);~Date(){};Date(const Date & date);Date & operator=(const Date & date);int operator-(const Date &date);Date operator+(int days);int compare(const Date &date);void print();int getDaysofYear();int getRemainingDaysofYear();friend ostream & operator<<(ostream & out, const Date & date);};inline bool isLeapYear(int year ){if(year%4==0&&year%100!=0||year%400==0) return true;else return false;}Date::Date(int year,int month,int day):m_year(year),m_month(month),m_day(day){ m_totalDaysYear=isLeapYear(m_year)?366:365;}Date::Date(const Date &date){m_year=date.m_year;m_month=date.m_month;m_day=date.m_day;m_totalDaysYear=date.m_totalDaysYear;}Date & Date::operator=(const Date & date){if(this==&date) return *this;m_year=date.m_year;m_month=date.m_month;m_day=date.m_day;m_totalDaysYear=date.m_totalDaysYear;return *this;}int Date::operator-(const Date &date){int num=0;Date bigDate,smallDate;int value=compare(date);if(value==1){bigDate=*this;smallDate=date;}else if(value==-1){bigDate=date;smallDate=*this;}else return 0;int yearGap=bigDate.m_year-smallDate.m_year;if(yearGap>=2){for(int i=smallDate.m_year+1;i<=bigDate.m_year-1;i++){if(isLeapYear(i)) num+=366;else num+=365;}num+=bigDate.getDaysofYear();num+=smallDate.getRemainingDaysofYear();}else if(bigDate.m_year-smallDate.m_year==1){num+=bigDate.getDaysofYear();num+=smallDate.getRemainingDaysofYear();}else{num+=bigDate.getDaysofYear();num-=smallDate.getDaysofYear();}if(value==1) return num;else return -num;}Date Date::operator+(int days){int year=m_year,month,day;int remainings=getRemainingDaysofYear();if(days>remainings){days-=remainings;year++;int num=isLeapYear(year)?366:365;while(days>num){ // 找到相应的年份days-=num;year++;num=isLeapYear(year)?366:365;}}int months[12]={31,28,31,30,31,30,31,31,30,31,30,31};if(isLeapYear(year)) months[1]=29;month=m_month;if(days-(months[m_month-1]-m_day)>0){days-=months[m_month-1]-m_day;int i=m_month;for(;i<12;i++){// 找到相应的月份if(days-months[i]<0) break;days-=months[i];}month=i+1;}day=days;return Date(year,month,day);}int Date::compare(const Date &date){if(m_year>date.m_year){return 1;}else if(m_year<date.m_year){return -1;}else{if(m_month>date.m_month) return 1;else if(m_month<date.m_month) return -1;else{if(m_day>date.m_day) return 1;else if(m_day<date.m_day) return -1;else return 0;} }}void Date::print(){cout<<m_year<<'\\'<<m_month<<'\\'<<m_day<<endl;}int Date::getDaysofYear(){int months[12]={31,28,31,30,31,30,31,31,30,31,30,31};if(isLeapYear(m_year)) months[1]=29;int num=0;for(int i=0;i<m_month-1;i++){num+=months[i];}return num+m_day;}int Date::getRemainingDaysofYear(){return m_totalDaysYear-getDaysofYear();}ostream & operator<<(ostream & out, const Date & date){out<<date.m_year<<'\\'<<date.m_month<<'\\'<<date.m_day;return out;}int main(){Date d1(2012,1,20),d2(2014,1,12); Date d3(d2),d4; d4=d1; cout<<d1;int days=50;cout<<d1<<" - "<<d2<<" = "<<d1-d2<<" days "<<endl;return 0;}
0 0
- C++ 自定义日期类实现日期的加减算法
- 日期的加减类
- 日期加减算法
- JS实现日期加减
- Java实现日期加减
- ASP实现日期的加减运算
- ASP实现日期的加减运算
- 日期类的加减及java中所以日期类的操作算法大全
- 日期类的加减及java中所有日期类的操作算法大全
- 日期类的加减及java中所以日期类的操作算法大全
- 日期类的加减及java中所以日期类的操作算法大全
- 日期加减的函数
- javascript的日期加减
- 日期的加减
- 日期的加减
- js 日期的加减
- 时间日期的加减
- java日期的加减
- php 全局变量
- 跑酷入门
- 结合游戏 简单介绍 Material Animator Controller position scale等
- C++ 实现mystring类型
- 【cocos2d-x 2.x 学习与应用总结】11: 理解CCGLProgram
- C++ 自定义日期类实现日期的加减算法
- react native 入门探索
- 在vmwate的CentOS7的虚拟机中安装在rails 4.2.0 版本以后,无法通过其他机器访问 3000端口的问题
- sql:在更新表数据出错(update 。。。。..)
- The application could not be verified
- iOS资源存放问题
- 【深度学习&分布式】Parameter Server 详解
- JAVA递归学习笔记
- C++中如何用cout实现输出的填充,宽度,对齐及其精度控制