class Date{public:    Date(int y = 1, int m = 1, int d = 1)    {        if (y <= 0 || m <= 0 || m > 12 || d <= 0 || d > getday(y, m))        {            _y = 1;            _m = 1;            _d = 1;        }        else        {            _y = y;            _m = m;            _d = d;        }    }    int getday(int y,int m)    {        static int _day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };        int day = _day[m];        if (m == 2&&((y%4==0&&y%100!=0)||y%400==0))             day++;            return day;    }       Date& operator+=(int day)    {        _d += day;        while (_d > getday(_y, _m))        {            _d -= getday(_y, _m);            _m++;            if (_m == 13)            {                _y++;                _m = 1;            }        }        return *this;    }    Date operator+(int day)    {        Date copy(*this);        copy += day;        return copy;    }    bool operator==(const Date& d)    {        return _y == d._y            && _m == d._m            && _d == d._d;    }    bool operator!=(const Date& d)    {        return !(*this== d);    }    Date operator-(int day)    {        Date ret(*this);        ret -= day;        return ret;    }    int operator-(const Date& d)    {        //计算相减问题转换为,小日期加天数等于大日期        //自己天数就是相减天数        Date max = *this;//假设原来的日期大        Date min = d;        int flag = 1;        if (max < min)        {            max = d;            min = *this;            flag = -1;        }        int day_n =0;        while (min < max)        {            min+=1;            day_n++;        }        return day_n*flag;        //返回值为正表示当前比传进来的日期大,反之小    }    Date& operator-=(int day)    {        _d -= day;        while (_d<0)        {            if (_d < 0)                _m--;            if (_m == 0)            {                _y--;                _m = 12;            }            //if (_y < 0)            _d += getday(_y,_m);        }        return *this;    }    bool operator>(const Date& d)    {        if (_y > d._y)            return true;        else if (_y == d._y)        {            if (_m > d._m)                return true;            else if (_m == d._m)            {                if (_d > d._d)                    return true;            }        }        return false;    }    bool operator<(const Date& d)    {        /*if (_y < d._y)            return true;        else if (_y == d._y)        {            if (_m < d.m)                return true;            else if (_m == d._m)            {                if (_d < d._d)                    return true;            }        }        return false;*/        return !(*this > d||*this==d);    }    bool operator<=(const Date& d)    {        return !(*this > d);    }    bool operator>=(const Date& d)    {        return (*this > d || *this == d);        //return !(*this < d);    }    private:        int _y;        int _m;        int _d;};
©著作权归作者所有:来自51CTO博客作者赶路人丶的原创作品,如需转载,请注明出处,否则将追究法律责任

萌新成长

赞赏

0人进行了赞赏支持

更多相关文章

  1. 计算折旧月数,实用才是硬道理
  2. SQL中如何求解连续N天都满足的问题
  3. 玩转 Linux 环境下日期的语法
  4. Android(安卓)自定义滚动选择日期
  5. Android常用控件(按钮、选择框、日期时间控件)
  6. (ios实现)用c/c++混合编程方式为ios/android实现一个自绘日期选
  7. Android定制日历,支持周月切换,日期标记,农历显示,节假日
  8. android 点击EditText 弹出日期选择器DatePickerDialog
  9. Android——使用DatePicker和TimePicker显示当前日期和时间

随机推荐

  1. Android 8.1 关机充电动画(三)Android模式
  2. Android FDE 加密过程
  3. Android学习笔记06:线性布局LinearLayout
  4. 【Android进阶学习】实现没有标题栏的窗
  5. android 和JS互调
  6. Android第一周
  7. 理解onMeasure
  8. Android 中文 API (29) —— CompoundButto
  9. android 6.0-高通视频通话拨打流程
  10. Android.Tools.Summary