C++封装一个时间库


.h文件是这样的
#pragma once

#include <time.h>
#include <windows.h>


int DayOfTheWeek(int nYear, int nMonth, int nDay);
//等待时间超时;
int WaitTimeOut(unsigned int nMilliseconds);

class CMyLocalTime
{
public:
	CMyLocalTime();
	~CMyLocalTime();
public:
	unsigned int GetMyLocalTime() { return (unsigned int)m_nTime; }
	int          GetYear() { return m_nYear; }
	int          GetMonth() { return m_nMonth + 1; }
	int          GetDay() { return m_nDay; }
	int          GetHour() { return m_nHour; }
	int          GetMin() { return m_nMin; }
	int          GetSec() { return m_nSec; }
        int          GetWeek() { return m_nWDay; }
public:
	unsigned int InitMyLocalTime();
	bool IsCheckWait(time_t nTime, int nWaitTime);
private:
	time_t m_nTime;
	int    m_nYear;
	int    m_nMonth;
	int    m_nDay;
	int    m_nHour;
	int    m_nMin;
	int    m_nSec;
        int    m_nWDay;//星期几标志(1-6)代表星期一到星期六0代表星期天
};
//蔡勒公式计算星期几;
int DayOfTheWeek(int nYear, int nMonth, int nDay)
{

	//Y+[Y/4] + [C/4] - 2C + [26(M+1)/10] + d -1;Y 2016中的16,C代表20, m是month,day是日;
        if(nYear < 1600)
        {
	    printf("this can't handle!\n");
	    return 0;
	}
        int nHelpYear = 0;
        int nHelpMonth = 0;
        if(nMonth == 1 || nMonth == 2)
	{
	     nHelpYear = nYear - 1;
 	     nHelpMonth = 12 + nMonth;
	}
	int nY = nHelpYear / 100;
	int nC = nHelpYear % 100;

	int nWeeks = nY + nY / 4 + nC / 4 - 2 * nC + 26 * (nHelpMonth+ 1) / 10 + nDay - 1;
	int nWeek = nWeeks % 7;
	if (nWeek >= 0)
	{
		return nWeek;
	}
	else
	{
		return nWeek + 7;
	}
}

int WaitTimeOut(unsigned int nMilliseconds)
{
#if defined(_WIN32) || defined(_WIN64)
	Sleep(nMilliseconds);
	return 0;
#else
	unsigned int nSec = nMilliseconds / 1000;
	unsigned int nUsec = (nMilliseconds % 1000) * 1000;
	struct timeval tv;
	tv.tv_sec = nSec;
	tv.tv_usec = nUsec;
	int nRet = select(0, NULL, NULL, NULL, &tv);
	return nRet;
#endif
}

CMyLocalTime::CMyLocalTime()
{
}


CMyLocalTime::~CMyLocalTime()
{
}

unsigned int CMyLocalTime::InitMyLocalTime()
{
	m_nTime = time(NULL);
	struct tm* pTime = localtime(&m_nTime);
	if (pTime != NULL)
	{
		m_nYear = pTime->tm_year + 1900;
		m_nMonth = pTime->tm_mon;
		m_nDay = pTime->tm_mday;
		m_nHour = pTime->tm_hour;
		m_nMin = pTime->tm_min;
		m_nSec = pTime->tm_sec;
	}
	return (unsigned int)m_nTime;
}

bool CMyLocalTime::IsCheckWait(time_t nTime, int nWaitTime)
{
	if (GetMyLocalTime() - nTime > nWaitTime)
	{
		return true;
	}
	return false;
}
struct tm {

	int tm_sec; /* 秒 – 取值区间为[0,59] */

	int tm_min; /* 分 - 取值区间为[0,59] */

	int tm_hour; /* 时 - 取值区间为[0,23] */

	int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */

	int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */

	int tm_year; /* 年份,其值等于实际年份减去1900 */

	int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */

	int tm_yday; /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */

	int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/
}

貌似也没有什么难的东西就是把time直接封装到一个类中,win和linux都可以使用。由于昨天失误忘了,今天测试发现不过,具体看来一下tm的结构体,发现月份是0-11.


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值