用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
   ||month < 1 || month > 12
   || day < 1 || day > GetMonthDay(year,month))
  {
   cout << "Invalid Date" << endl;
  }
 }

int GetMonthDay(int year, int month)
 {
  int monthArray[12] = { 31, 28, 31, 30, 31,
   30, 31, 31, 30, 31, 30, 31 };
  if (IsLeapYear(year)&&month==2)
  {
   return monthArray[month - 1] + 1;
  }
  return monthArray[month - 1];
 }

bool IsLeapYear(int year)
 {
  return year % 400 == 0 || year % 4 == 0
   && year % 100 != 0;
 }
 
 Date operator+(int day)      //加一个天数
 {
  Date tmp(*this);
  tmp._day += day;
  while (tmp._day > GetMonthDay(tmp._year,tmp._month))
  {
   tmp._day -= GetMonthDay(tmp._year, tmp._month);

if (tmp._month == 12)
   {
    tmp._year += 1;
    tmp._month = 1;
   }
   else
   {
    tmp._month += 1;
   }

}
  return tmp;
 }

Date& operator+=(int day)     
 {
  this->_day += day;
  while (this->_day > GetMonthDay(this->_year, this->_month))
  {
   this->_day -= GetMonthDay(this->_year, this->_month);

if (this->_month == 12)
   {
    this->_year += 1;
    this->_month = 1;
   }
   else
   {
    this->_month += 1;
   }

}
  return *this;
 }

Date operator-(int day)    //减一个天数
 {
  Date tmp(*this);
  tmp._day -= day;
  while (tmp._day < 0)
  {
   if (tmp._month == 1)
   {
    tmp._year -= 1;
    tmp._month = 12;
    tmp._day += GetMonthDay(tmp._year, tmp._month);
   }
   else
   {
    tmp._month -= 1;
    tmp._day += GetMonthDay(tmp._year, tmp._month);
   }

}
  return tmp;
 }

Date operator++()  //前置自增
 {
  *this += 1;
  return *this;
 }

bool operator==(const Date& d)   //测试日期相等
 {
  return _year == d._year&&
   _month == d._month&&
   _day == d._day;
 }

bool operator!=(const Date& d)
 {
  return !(_year == d._year&&
   _month == d._month&&
   _day == d._day);
 }

bool operator<(const Date& d)
 {
  return !(_year < d._year&&
   _month < d._month&&
   _day < d._day);
 }

int operator-(const Date& d)   //一个日期减一个日期
 {
  Date tmp1 = d;
  Date tmp2 = *this;

int count = 0;
  if (tmp2 < tmp1)
  {
   Date rev;
   rev = tmp2;
   tmp2 = tmp1;
   tmp1 = rev;
  }

while (tmp2 != tmp1)
  {
   count++;
   ++tmp1;
  }

return count;
 }

void Display()
 {
  cout << _year << "-" << _month << "-" << _day << endl;
 }

private:
 int _year;
 int _month;
 int _day;
};

void Test1() //测试加减某一个天数
{
 int day;
 Date d1(2015,3,1);
 d1.Display();
 cin >> day;
 //(d1 + day).Display();
 (d1 - day).Display();
}

void Test2()
{
 Date d1(2015, 2, 28);
 //d1.Display();

Date d2(2015, 2, 28);
 cout << (d1 != d2) << endl;
 //(d1++).Display();
 
}

void Test3()
{
 Date d1(2004, 2, 1);
 Date d2(2004, 3, 1);
 
 int ret = d1 - d2;
 cout << ret << endl;
}

int main()
{
 //Test1();
 //Test2();
 Test3();
 return 0;
}

时间: 2024-08-26 08:08:05

用c++实现的简单的日期类的相关文章

类实现一个简单的日期计算器

作为一个程序员,对于时间的概念已经退化到了三岁小孩水平,常常会醉心于写一个程序忘记了时间,一个下午,一天,甚至一个星期就过去了.对于一个刚入程序员大门的我来说,时光真的是匆匆溜走,所以经常会百度一个日期计数器,算今天到那些特别的日子还有多少天.用多了后就觉得现在储备的编程知识可以去实现一个简单的日期计算器了.所以就写了这篇博客给大家分享一下. 首先,得设计这个日期类,一个日期类应该具有私有数据成员应该有年Year,月month,日day.在这我们就不精确到时分秒了. #pragma once #

c++ 日期类

#pragma once //头文件 class Date{ private: int _year; int _month; int _day; public: Date(int year=1990,int month=1,int day=1); Date(const Date& tmp);     ~Date(); int operator-(const Date& tmp);//日期相减 Date operator+(int day);//日期与天数相加 Date& opera

c++实现日期类,日历计算器

在写日期类日期计算器之前先实现了一个简单的复数类 //引用做参数,1.swap--在函数内部改变参数,2.Bigdata提高效率 //内联函数必须在定义处加上inline //定义在类内部的函数默认为内联函数 //c++中尽量使用const,枚举,内联去替代宏 //宏没有类型安全的检查,在预处理的时候替换了所以无法调试,宏安全性不高 class Complex { public: Complex(double real = 0.0, double image = 0.0)//定义了一个全缺省的构

Swift3.0中关于日期类的使用指引

处理日期的常见情景 NSDate -> String & String -> NSDate 日期比较 日期计算(基于参考日期 +/- 一定时间) 计算日期间的差异 拆解NSDate对象(分解成year/month/day/hour/minute/second 等) NSDate相关类 NSDate DateFormatter DateComponents DateComponentFormatter Calendar Date structure: Swift3.0中引入了Date s

2.3日期类题目题解

今天追的综艺更新了,没想到超长待机三个小时,再加上乱七八糟的事情耽误了很多的时间,没有时间更新今日份所有题目的总结了.恰好今天这套题很多都是一个类型的题目那就分开整理吧,今天更新计算日期类的题目,其他的等明天继续更. 关于计算日期类的题目,可以说都很简单了,而且一般都是小题.就算不会代码差不多电脑自带的日期啊.execl啊都能做,所以我之前都是用的vbs做的,挺方便的.但是听大佬说国赛没有execl什么的正好今天的题有几道关于日期的题目,趁这个机会整理出来.稍后更新一篇常用的方法吧. 第一题:高

java — 时间日期类

java -- 时间日期类的简单操作 一.java.util.Date类 获取系统时间 1 public static void main(String[] args) { 2 // 使用Date获取系统时间 3 Date date = new Date(); 4 System.out.println(date); 5 } 输出结果:Sun Jan 13 12:30:30 CST 2019 输出结果不符合中国人的阅读习惯,我们得使用 SimpleDateFormat类 进行一些操作,按照我们自己

Python+Selenium进阶版(八)- Python自定义封装一个简单的Log类

目标:如何写一个Python日志类,用来输出不同级别的日志信息到本地文件夹下的日志文件里. 练习场景: 我们需要封装一个简单的日志类,主要有以下内容: 1.生成的日志文件格式是 年月日分秒.log 2.生成的XXX.log文件存储在项目根目录下Logs文件夹下 3.这个日志类,支持INFO,ERROR两种日志级别 4.日志里,每行日志输出,时间日期+执行类名称+日志级别+日志描述 解决思路: 1.在根目录下新建一个Logs的文件夹,获取这个Log的相对路径: 2.日志的保存命名,需要系统时间:

日期类 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.基本数据类型和包装类互转换: 语法糖--