⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eroomtime.cpp

📁 network library that can be use all network application!
💻 CPP
字号:
/*
// All Rights Reserved Copyright(c) 2000 Eroombox Telecom technology.
//==============================================================================
//EroomTime.cc: 矫埃包访 傍烹窃荐
//==============================================================================
*/
#include <stdio.h>
#include <string.h>
#include "EroomTime.h"

int      uyear_days[] = {
        0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366
};

int      nyear_days[] = {
        0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365
};

//  2岿捞 29老
int      uyear_day[] = {
        0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};

// 2岿捞 28老
int      nyear_day[] = {
        0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};

/*
//#_START_FUNCFORM==============================================================
//[name] CEroomTime::eCheckDateInterval
//[func] 矫埃厚背
//[call] CheckDateInterval( int a_OYear, int a_OMon, int a_ODay,
//		int a_OHour, int a_OMin, int a_OSec,
//		int a_CYear, int a_CMon, int a_CDay,
//		int a_CHour, int a_CMin, int a_CSec)
//[io]  int a_OYear:I:斥 
//	int a_OMon:岿
//	int a_ODay:I:老
//	int a_OHour:I:矫
//	int a_OMin:I:盒
//	int a_OSec:I:檬 
//	int a_CYear:I:斥
//	int a_CMon:I:岿
//	int a_CDay:I:老
//	int a_CHour:I:矫
//	int a_CMin:I:盒
//	int a_CSec:I:檬
//[return] 0:EROOMEQU_TIME:矫埃捞 鞍澜
//	   1:EROOMPRV_TIME:傈矫埃
//	   2:EROOMAFT_TIME:饶矫埃
//
//	   矫埃坷幅(1)
//	   -1:EROOMERR_YEAR:
//	   -2:EROOMERR_MON:
//	   -3:EROOMERR_DAY:
//	   -4:EROOMERR_HOUR:
//	   -5:EROOMERR_MIN:
//	   -6:EROOMERR_SEC:
//	   -7:EROOMERR_OTHER:
// 		荤埃坷幅(2)  
//	   -11:EROOMERR_YEAR:
//	   -12:EROOMERR_MON:
//	   -13:EROOMERR_DAY:
//	   -14:EROOMERR_HOUR:
//	   -15:EROOMERR_MIN:
//	   -16:EROOMERR_SEC:
//	   -17:EROOMERR_OTHER:
//[process] 瘤沥等 滴 矫埃阑 厚背茄促.
//[note]
//[history] 2000-10-12 累己
//#_END_FUNCFORM================================================================
*/

int
CEroomTime::CheckDateInterval(
	int a_OYear, int a_OMon, int a_ODay,
	int a_OHour, int a_OMin, int a_OSec,
	int a_CYear, int a_CMon, int a_CDay,
	int a_CHour, int a_CMin, int a_CSec)
{
	int	w_CheckDate;

	w_CheckDate = CheckDate(a_OYear, a_OMon, a_ODay, a_OHour, a_OMin,
		a_OSec);
	if(w_CheckDate < 0) { //  
		return(w_CheckDate-10);
	}

	w_CheckDate = CheckDate(a_CYear, a_CMon, a_CDay, a_CHour, a_CMin,
		a_CSec);
	if(w_CheckDate < 0) { // 
		return(w_CheckDate);
	}
	if(a_OYear != EROOMTIME_NONE && a_CYear != EROOMTIME_NONE) {
		if(a_OYear < a_CYear) {
			return(EROOMAFT_TIME);
		} else if(a_OYear > a_CYear) {
			return(EROOMPRV_TIME);
		}
	}
	if(a_OMon != EROOMTIME_NONE && a_CMon != EROOMTIME_NONE) {
		if(a_OMon < a_CMon) {
			return(EROOMAFT_TIME);
		} else if(a_OMon > a_CMon) {
			return(EROOMPRV_TIME);
		}
	}
	if(a_ODay != EROOMTIME_NONE && a_CDay != EROOMTIME_NONE) {
		if(a_ODay < a_CDay) {
			return(EROOMAFT_TIME);
		} else if(a_ODay > a_CDay) {
			return(EROOMPRV_TIME);
		}
	}
	if(a_OHour != EROOMTIME_NONE && a_CHour != EROOMTIME_NONE) {
		if(a_OHour < a_CHour) {
			return(EROOMAFT_TIME);
		} else if(a_OHour > a_CHour) {
			return(EROOMPRV_TIME);
		}
	}
	if(a_OMin != EROOMTIME_NONE && a_CMin != EROOMTIME_NONE) {
		if(a_OMin < a_CMin) {
			return(EROOMAFT_TIME);
		} else if(a_OMin > a_CMin) {
			return(EROOMPRV_TIME);
		}
	}
	if(a_OSec != EROOMTIME_NONE && a_CSec != EROOMTIME_NONE) {
		if(a_OSec < a_CSec) {
			return(EROOMAFT_TIME);
		} else if(a_OSec > a_CSec) {
			return(EROOMPRV_TIME);
		}
	}
	return(EROOMEQU_TIME);
}

int CEroomTime::CheckDateInterval(int a_IntervalDate, int a_IntervalTime,
	int a_Year, int a_Mon, int a_Day,
	int a_Hour, int a_Min, int a_Sec)
{
	int	w_DYear, w_DMon, w_DDay, w_DHour, w_DMin, w_DSec;

	GetIntervalTime(a_IntervalDate, a_IntervalTime,
		w_DYear, w_DMon, w_DDay, w_DHour, w_DMin, w_DSec);

	return(CheckDateInterval(
		w_DYear, w_DMon, w_DDay, w_DHour, w_DMin, w_DSec,
		a_Year, a_Mon, a_Day, a_Hour, a_Min, a_Sec));
}

/*
//#_START_FUNCFORM==============================================================
//[name] CEroomTime::CheckDate
//[func] 瘤沥矫埃 沥钦己 眉农
//[call] CheckDate(int a_Year, int a_Mon, int a_Day,
//		int a_Hour, int a_Day, int a_Sec)
//[io] 	int a_Year:I:
//	int a_Mon:I:
//	int a_Day:I:
//	int a_Hour:I:
//	int a_Day:I:
//	int a_Sec:I:
//[return] 0:沥惑
//	   -1:EROOMERR_YEAR:
//	   -2:EROOMERR_MON:
//	   -3:EROOMERR_DAY:
//	   -4:EROOMERR_HOUR:
//	   -5:EROOMERR_MIN:
//	   -6:EROOMERR_SEC:
//	   -7:EROOMERR:
//[process] 荤埃狼 沥钦己阑 眉农茄促.
//[note]
//[history] 2000-10-12 01-00-00 贸澜累己
//#_END_FUNCFORM================================================================
*/

int CEroomTime::CheckDate(int a_Year, int a_Mon, int a_Day,
	int a_Hour, int a_Min, int a_Sec)
{
	int	w_DayMax;

	if(a_Year != EROOMTIME_NONE) {
		if(a_Year < EROOMYEAR_MIN || a_Year > EROOMYEAR_MAX) {
			return(EROOMERR_YEAR);
		}
	}
	if(a_Mon != EROOMTIME_NONE) {
		if(a_Mon < EROOMMON_MIN || a_Mon > EROOMMON_MAX) {
			return(EROOMERR_MON);
		}
	}
	if(a_Day != EROOMTIME_NONE) {
		if(a_Year != EROOMTIME_NONE && a_Mon != EROOMTIME_NONE) {
			w_DayMax = EROOMMAXDAY_INMON(a_Year, a_Mon); 
		} else {
			w_DayMax = EROOMDAY_MAX;
		}
		// 
		if(a_Day < EROOMDAY_MIN || a_Day > w_DayMax) {
			return(EROOMERR_DAY);
		}
	}
	if(a_Hour != EROOMTIME_NONE) {
		if(a_Hour < EROOMHOUR_MIN || a_Hour > EROOMHOUR_MAX) {
			return(EROOMERR_HOUR);
		}
	}
	if(a_Min != EROOMTIME_NONE) {
		if(a_Min < EROOMMIN_MIN || a_Min > EROOMMIN_MAX) {
			return(EROOMERR_MIN);
		}
	}
	if(a_Sec != EROOMTIME_NONE) {
		if(a_Sec < EROOMSEC_MIN || a_Sec > EROOMSEC_MAX) {
			return(EROOMERR_SEC);
		}
	}
	return(EROOMTIME_VALID);
}

/*
//#_START_FUNCFORM==============================================================
//[name] CEroomTime::GetIntervalTime
//[func] INTERVAL 矫埃阑 备窃 
//[call] void GetIntervalTime(int a_DDate, int a_DTime,
//	 int &a_CYear, int &a_CMon, int &a_CDay,
//	 int &a_CHour, int &a_CMin, int &a_CSec,
//	 int a_Year, int a_Mon, int a_Day,
//	 int a_Hour, int a_Min, int a_Sec)
//[io] 	int a_DDate:I:朝楼瘤沥 EROOMITV_YEAR荤侩 EROOMITV_YEAR(3)
//	int a_DTime:I:矫埃瘤沥 EROOMITV_HOUR荤侩
// 	int a_CYear:I:
//	int a_CMon:I:
//	int a_CDay:I:
//	int a_CHour:I:
//	int a_CMin:I:
//	int a_CSec:I:
// 	int a_Year:I:
//	int a_Mon:I:
//	int a_Day:I:
//	int a_Hour:I:
//	int a_Min:I:
//	int a_Sec:I:
//[return] 绝澜 
//[process] 
//[note] 
//[history]2000-10-15 01-00-00 贸澜累己
//#_END_FUNCFORM================================================================
*/

void CEroomTime::GetIntervalTime(int a_DDate, int a_DTime,
	int &a_CYear, int &a_CMon, int &a_CDay,
	int &a_CHour, int &a_CMin, int &a_CSec,
	int a_Year, int a_Mon, int a_Day,
	int a_Hour, int a_Min, int a_Sec)
{
	int	w_IYear, w_IMon, w_IDay, w_IHour, w_IMin, w_ISec;
	int	w_Carry;
	int	w_DayMax;

	w_IYear = EROOMITV_GYEAR(a_DDate); 
	w_IMon = EROOMITV_GMON(a_DDate); 
	w_IDay = EROOMITV_GDAY(a_DDate); 

	w_IHour = EROOMITV_GHOUR(a_DTime); 
	w_IMin = EROOMITV_GMIN(a_DTime); 
	w_ISec =EROOMITV_GSEC(a_DTime); 

	a_CSec = w_ISec + a_Sec;	

	w_Carry = 0;
	if(a_CSec < EROOMSEC_MIN) {
		while(a_CSec < EROOMSEC_MIN) {
			a_CSec += EROOMSEC_CMAX; 
			w_Carry -= 1;
		}
	} else if(a_CSec > EROOMSEC_MAX) {
		while(a_CSec > EROOMSEC_MAX) {
			a_CSec -= EROOMSEC_CMAX; 
			w_Carry += 1;
		}
	}
	a_CMin = w_IMin + a_Min + w_Carry;	

	w_Carry = 0;
	if(a_CMin < EROOMMIN_MIN) {
		while(a_CMin < EROOMMIN_MIN) {
			a_CMin += EROOMMIN_CMAX; 
			w_Carry -= 1;
		}
	} else if(a_CMin > EROOMMIN_MAX) {
		while(a_CMin > EROOMMIN_MAX) {
			a_CMin -= EROOMMIN_CMAX; 
			w_Carry += 1;
		}
	}

	a_CHour = w_IHour + a_Hour + w_Carry;	
	w_Carry = 0;
	if(a_CHour < EROOMHOUR_MIN) {
		while(a_CHour < EROOMHOUR_MIN) {
			a_CHour += EROOMHOUR_CMAX; 
			w_Carry -= 1;
		}
	} else if(a_CHour > EROOMHOUR_MAX) {
		while(a_CHour > EROOMHOUR_MAX) {
			a_CHour -= EROOMHOUR_CMAX; 
			w_Carry += 1;
		}
	}
	a_CMon = w_IMon + a_Mon + w_Carry;	
	w_Carry = 0;
	if(a_CMon < EROOMMON_MIN) {
		while(a_CMon < EROOMMON_MIN) {
			a_CMon += EROOMMON_CMAX; 
			w_Carry -= 1;
		}
	} else if(a_CMon > EROOMMON_MAX) {
		while(a_CMon > EROOMMON_MAX) {
			a_CMon -= EROOMMON_CMAX; 
			w_Carry += 1;
		}
	}
	a_CYear = w_IYear + a_Year + w_Carry;	

	a_CDay = w_IDay + a_Day;	
	w_Carry = 0;
	w_DayMax = EROOMMAXDAY_INMON(a_CYear, a_CMon);
	if(a_CDay < EROOMDAY_MIN) {
		while(a_CDay < EROOMDAY_MIN) {
			a_CMon--;
			if(a_CMon < EROOMMON_MIN) {
				a_CMon += EROOMMON_MAX;
				a_CYear--;
			}
			w_DayMax = EROOMMAXDAY_INMON(a_CYear, a_CMon);
			a_CDay += w_DayMax; 
		}
	} else if(a_CDay > w_DayMax) {
		while(a_CDay > w_DayMax) {
			a_CDay -= w_DayMax; 

			a_CMon++;
			if(a_CMon < EROOMMON_MAX) {
				a_CMon -= EROOMMON_MAX;
				a_CYear++;
			}
			w_DayMax = EROOMMAXDAY_INMON(a_CYear, a_CMon);
		}
	}
}

void CEroomTime::GetIntervalTime(int a_DDate, int a_DTime,
	int &a_CYear, int &a_CMon, int &a_CDay,
	int &a_CHour, int &a_CMin, int &a_CSec)
{
	int	w_Year, w_Mon, w_Day, w_Hour, w_Min, w_Sec;

	GetTime(w_Year, w_Mon, w_Day, w_Hour, w_Min, w_Sec);

	GetIntervalTime(a_DDate, a_DTime,
		a_CYear, a_CMon, a_CDay, a_CHour, a_CMin, a_CSec,
		w_Year, w_Mon, w_Day, w_Hour, w_Min, w_Sec);
}

/*
//#_START_FUNCFORM==============================================================
//[name] CEroomTime::GetTime
//[func] 矫埃掘澜
//[call] void GetTime(
//	int &a_Year, int &a_Mon, int &a_Day,
//	int &a_Hour, int &a_Min, int &a_Sec)
//[io] 	int a_Year:O:
//	int a_Mon:O:
//	int a_Day:O:
//	int a_Hour:O:
//	int a_Min:O:
//	int a_Sec:O:
//[return] 绝澜 
//[process] 
//[note]  
//[history]2000-10-12 01-00-00 贸澜累己
//#_END_FUNCFORM================================================================
*/

void CEroomTime::GetTime(int &a_Year, int &a_Mon, int &a_Day,
	int &a_Hour, int &a_Min, int &a_Sec)
{
	struct tm *w_Tm;

	w_Tm = GetTm();

	a_Year = w_Tm->tm_year+1900;
	a_Mon = w_Tm->tm_mon+1;
	a_Day = w_Tm->tm_mday;
	a_Hour = w_Tm->tm_hour;
	a_Min = w_Tm->tm_min;
	a_Sec = w_Tm->tm_sec;
}

/*
//#_START_FUNCFORM==============================================================
//[name] CEroomTime::GetTime
//[func] 矫埃掘澜
//[call] time_t GetTime()
//[io] 側偟 	
//[return] time_t:矫埃 
//[process] 
//[note] 
//[history]2000-10-12 01-00-00 贸澜累己
//#_END_FUNCFORM================================================================
*/

time_t CEroomTime::GetTime()
{
	time_t	w_Time;
	
	time(&w_Time);

	return(w_Time);
}

/*
//#_START_FUNCFORM==============================================================
//[name] CEroomTime::EroomGetTm
//[func] 矫埃掘澜
//[call] struct tm* EroomGetTm()
//[io] 
//[return] struct tm*:矫埃 
//[process] 
//[note] 側
//[history]2000-10-12 01-00-00 贸澜累己
//#_END_FUNCFORM================================================================
*/

struct tm *CEroomTime::GetTm()
{
	time_t	w_Time;

	w_Time = GetTime();

	return(localtime(&w_Time));
}


// 夸老阑 馆券
// 0-6(老-配)
int CEroomTime::GetDayOfWeek()
{
	struct tm *w_Tm;

	w_Tm = GetTm();

	return(w_Tm->tm_wday);
}

/*
//#_START_FUNCFORM==============================================================
//[name] CEroomTime::GetTime
//[func] 矫埃掘澜
//[call] void GetTime(
//	int &a_Year, int &a_Mon, int &a_Day,
//	int &a_Hour, int &a_Min, int &a_Sec)
//[io] 	int a_Year:O:
//	int a_Mon:O:
//	int a_Day:O:
//	int a_Hour:O:
//	int a_Min:O:
//	int a_Sec:O:
//  int a_wDay:0: 夸老
//[return] 绝澜 
//[process] 
//[note]  
//[history]2000-10-12 01-00-00 贸澜累己
//#_END_FUNCFORM================================================================
*/

void CEroomTime::GetTime(int &a_Year, int &a_Mon, int &a_Day,
	int &a_Hour, int &a_Min, int &a_Sec, int &a_WDay)
{
	struct tm *w_Tm;

	w_Tm = GetTm();

	a_Year = w_Tm->tm_year+1900;
	a_Mon = w_Tm->tm_mon+1;
	a_Day = w_Tm->tm_mday;
	a_Hour = w_Tm->tm_hour;
	a_Min = w_Tm->tm_min;
	a_Sec = w_Tm->tm_sec;
	a_WDay = w_Tm->tm_wday;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -