13.3.2 日期的天数版本(Day-Number of Date VER)

//日期的天数版本类文件
#ifndef HEADER_DATE_TWO
#define HEADER_DATE_TWO
#include <iostream>
using namespace std;
class Date_Two
{
	int absday;
	int year, month, day;
protected:
	//计算年月日的天数
	void ymd2i(int y, int m, int d);
	static const int tians[];
    bool isLeapYear(); //判断是否为闰年
public:
	//构造函数
	Date_Two(const string& s);
	//构造函数
	Date_Two(int n=1) : absday(n){}
	Date_Two(int y, int m, int d){ ymd2i(y,m,d); }
	//重载运算符+进行天数的添加
	Date_Two operator+(int n)const{ return Date_Two(absday + n); }
	//重载加等运算符,返回对像自己
	Date_Two& operator+=(int n){ absday +=n; return *this; }
	//重载++运算符,返回对像自己
	Date_Two& operator++(){ return *this +=1;}
	//ostream& print(ostream& o);
	void print(ostream& o);
	int operator-(Date_Two& d)const{ return absday - d.absday; }
	friend ostream& operator<<(ostream& o, Date_Two& d);
	  //friend std::ostream& operator<<(std::ostream& o, Date_Two& d);
};
#endif;

  

//下面是日期的天数版本的程序代码
#include "date_two.h"
#include <iostream>
#include <iomanip>
using namespace std;

const int Date_Two::tians[]={0,31,59,89,120,150,181,212,242,273,303,334};
Date_Two::Date_Two(const string& s)
{
	year = atoi(s.substr(0,4).c_str());
    month = atoi(s.substr(5,2).c_str());
	day = atoi(s.substr(8,2).c_str());
	ymd2i(year,month,day);
}

void Date_Two::ymd2i(int y, int m, int d)
{
	if(0<y || y>9999 || 0<m || m>12 || 0<d || d>31){
	   absday=1;
	   return;
	}
	absday = (y-1)*365 + (y-1)/4 - (y-1)/100 + (y-1)/400;
	absday += tians[m-1] + (isLeapYear() && m>2) + d;
}
void Date_Two::print(ostream& o)
{
	o<<setfill('0')<<setw(4)<<year<<"-"<<setw(2)<<month<<"-"<<setw(2)<<day<<"\n"<<setfill(' ');
}

bool Date_Two::isLeapYear()
{
	return (year % 4 ==0 || year % 400 ==0) && (year % 100 != 0);
}


ostream& operator<<(ostream& o, Date_Two& d)
{
    //absday = absday > 0 && absday 
	d.print(o);
	return o;
}

  

#include "date_two.h"
#include <iostream>
using namespace std;
int main()
{
	Date_Two d("2011-11-11");
	
	cout<<d;

    system("pause");
	return 0;
}

  

posted @ 2012-02-14 23:25  简单--生活  阅读(486)  评论(0编辑  收藏  举报
简单--生活(CSDN)