.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.