日期类的实现

#include<iostream>
using namespace std;
class Data
{
public:
Data(int year , int month, int day) ;
void Display();   
bool IsInvalidData();
int DayOfMonth();
Data& operator=(Data const& d)
{
if (this != &d)
{
_year = d._year;
_month = d._month;
_day = d._day;
}
return *this;
}
Data& operator+(const int day)
{
int last;
if (day > 0)
{
  _day += day;
  while (_day > this->DayOfMonth())
  {
  last = _day - DayOfMonth();
  if (_month < 12)
  {
  _month++;
  }
  else
  {
  _year++;
  _month = 1;
  }
  _day = last;
  }
}
return *this;
}
Data& operator-(const int day)
{
int last;
if (day >= 0)
{
_day -= day;
while (_day <=0)
{
last = _day + DayOfMonth();
if (_month > 1)
{
_month--;
} 
else
{
_year -= 1;
_month = 12;
}
_day = last;
}
}
//else
//{
//Data& operator+ 3;
//}
return *this;
}
Data& operator++()
{
_day++;
if (_day > DayOfMonth())
{
if (_month < 12)
{
_month += 1;
_day = 1;
}   
else
{
_year += 1;
_month = 1;
_day = 1;
}
}
return *this;
}
Data operator++(int)
{
Data tmp = *this;
_day++;
if (_day > DayOfMonth())
{
if (_month < 12)
{
_month += 1;
_day = 1;
}
else
{
_year += 1;
_month = 1;
_day = 1;
}
}
return tmp;
}
Data operator--(int)
{
Data tmp = *this;
_day--;
if (_day <1)
{
if (_month >1)
{
_month -= 1;
_day = DayOfMonth();
}
else
{
_year -= 1;
_month = 12;
_day = DayOfMonth();
}
}
return tmp;
}
int operator-(Data const& d)
{
int count = 0;
Data tmp = d;
if (*this > d)
{
while (tmp != *this)
{
++tmp;
count++;
}
return count;
}  
}
bool operator!=(Data const& d)
{
return(!(_year == d._year && _month == d._month && _day == d._day));
}
bool operator==(Data const& d)
{
return(_year == d._year && _month == d._month && _day == d._day);
}
bool operator>(Data const& d)
{
return((_year > d._year || _year == d._year && _month > d._month) || ((_year == d._year) && (_month == d._month) && (_day > d._day)));
}
Data operator--()
{
_day--;
if (_day <1)
{
if (_month >1)
{
_month -= 1;
_day = DayOfMonth();
}
else
{
_year -= 1;
_month = 12;
_day = DayOfMonth();
}
}
return *this;
}
Data(Data const& d)
{
this->_year = d._year;
this->_month = d._month;
this->_day = d._day;
}
private:
int _year; 
int _month;
int _day;
bool IsLeapYear(int year);
};
Data::Data(int year = 0, int month = 0, int day = 0)
{
_year = year;
_month = month;
_day = day;
if (IsInvalidData() == false)
{
_year = 1900;
_month = 1;
_day=1;
}
}
void Data::Display()
{
cout << this->_year << "-" << this->_month << "-" << this->_day << endl;
}
bool Data::IsLeapYear(int year)
{
if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
{   
return true;
}
else
{
return false;
}
}
//Data&::Data operator=(Data const& d)
//{
//
//}
bool Data::IsInvalidData()
{
if (_year < 1900 || _month<1 || _month>12 || _day<1 || _day>DayOfMonth())
{
return false;
}
else
{
return true;
}
}
int Data::DayOfMonth()
{
int arr[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (IsLeapYear(_year) == true)
{
arr[2] += 1;
}
return arr[_month];
}
void test1()
{
Data d1(2016, 1, 1);
d1.Display();
Data d2;
d2= d1;
d2.Display();
}
void test2()
{
Data d1(2016, 1, 1);
d1.Display();
d1 = d1 + 30;
d1.Display();
d1 = d1 + 29;
d1.Display();
d1 = d1 + 400;
d1.Display();
}
void test3()
{
Data d1(2016, 1, 21);
d1.Display();
d1 = d1-(10);
d1.Display();
//d1 = d1-11;
//d1.Display();
//d1 = d1 - 365;
//d1.Display();
}
void test4()
{
Data d1(2016, 1, 1);
++d1;
d1.Display();
Data d2(2016, 12, 31);
++d2;
d2.Display();
Data d3(2016, 1, 31);
++d3;
d3.Display();
}
void test5()
{
Data d1(2016, 1, 1);
Data a;
a=d1++;
a.Display();
Data d2(2016, 12, 31);
a=d2++;
a.Display();
Data d3(2016, 1, 31);
a=d3++;
a.Display();
}
void test6()
{
Data d1(2016, 2, 1);
Data a;
a = d1--;
a.Display();
}
void test7()
{
Data d1(2016, 11, 10);
d1.Display();
Data d2(2016, 12, 31);
d2.Display();
int count = d2 - d1;
cout << count << endl;
}
  
int main()
{
//test1();
//test2();
//test3();
//test4();
//test5();
//test6();
test7();
    system("pause");
return 0;
}
时间: 2024-11-10 11:06:43

日期类的实现的相关文章

日期类 Date

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /* 日期类 Date Calendar 日期格式化类 SimpleDateFormat */ public class Demo3 { public static void main(String[] args) throws ParseException {

day17 包装类、日期类

包装类 作用:1.丰富了基本数据类型只能存放值的问题,还提供了大量的方法或常量. 2.包装类充当了基本数据类型和引用数据类型转换的桥梁. 应用层面:包装类.String.基本数据类型的互相转换. 1.基本数据类型转为String: String str = Integer.toString(10): String str = 10 + "": 2.String转换为基本数据类型: int i = Integer.parseInt(str): 3.基本数据类型和包装类互转换: 语法糖--

利用java日期类生成数据仓库维度表

利用java日期类生成数据仓库维度表 Date类: 最基础的日期时间类,返回一个相对日期的毫秒数.精确到毫秒,但不支持日期的国际化和分时区显示.Date 类从Java 开发包(JDK)1.0 就开始进化,当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, 日, 和年. 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了,这种改进旨在更好的处理日期数据的国际化格式. Calender类: 相对于Date更加强大的时间类,是抽象类,提供了常规的日期修改功能和国际化

Problem B: 时间和日期类(III)

Problem B: 时间和日期类(III) Time Limit: 4 Sec  Memory Limit: 128 MBSubmit: 2889  Solved: 1732[Submit][Status][Web Board] Description 设计一个日期时间类,用于读取输入的数据,按格式输出日期和时间. 设计日期时间类DateTime由2个成员组成,分别是一个Date类对象和一个Time类对象: 设计DateTime类需支持以下操作: DateTime::DateTime()无参构

Java:日历类、日期类、数学类、运行时类、随机类、系统类

一:Calendar类 java.util 抽象类Calendar   1.static Calendar getInstance()使用默认时区和语言环境获得一个日历. 2. int get(int field) 返回给定日历字段的值. java.lang.Object 继承者 java.util.Calendar 所有已实现的接口: Serializable, Cloneable, Comparable<Calendar> 直接已知子类: GregorianCalendar 对于日期字段:

时间类和日期类派生出时间日期类

今天再写一个多重继承的应用实例,时间类和日期类派生出时间日期类 程序代码 #include <iostream> using namespace std; class Date//日期类 { public: //构造函数 Date(int y = 0, int m = 0, int d = 0); //设置日期 void SetDate(int y,int m,int d); //打印日期 void PrintDate() { cout<<year<<"年&q

日期类详解

我不清楚大家在上大学的时候是什么样的情况,在我上大学的时候,老师在开课上第一节课的时候都会告诉我们,这本书他会将多少知识点?讲到哪里?考试考到哪里?以至于好多课程我学到的都只是皮毛基础的东西.导致现在不得不花很多的功夫来补以前落下的知识点.其中这个日期类就是一个很重要的知识点,在工作中经常会用到它,这个东西也不难,但是对于我自己来说经常忘这鬼,所以我这次就把它从头梳理一遍并且记录下来,供备以后使用. 首先介绍Date类的构造方法: 1. Date() 创建一个获取当前日期和时间的Date对象.

javascript-封装Date日期类

迁移时间:2017年5月27日18:43:02 Author:Marydon (一)对日期进行格式化 //自定义Date日期类的format()格式化方法 <script type="text/javascript"> // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(H).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字

【C++】日期类+日期万年历+日期计算器

对于日期类,我们主要实现一下日期类的基本函数,构造,拷贝构造,运算符的重载,析构.当然这里运算符的重载需要实现的还是挺多的,如:=.<.>.<=.>=.等 #include <iostream> using namespace std; class Date { public:     Date(int year = 1990, int month = 1, int day = 1)     {         _year = year;         _month 

用c++实现的简单的日期类

自己写的这个日期类实现了简单的一些日期可能会用到的功能, 比如加减某一个日期等等,详细的已在代码里面标注出来了. #include <iostream>using namespace std; class Date{public: Date(int year = 1900, int month = 1, int day = 1)  :_year(year)    //初始化列表     ,_month(month)     ,_day(day) {  if (year < 1900