Files
mir_server/Gateway/srvlib/include/second_time.h

206 lines
5.3 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
#ifndef _MINI_DATE_TIME_H_
#define _MINI_DATE_TIME_H_
//һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#include <time.h>
class SecondTime
{
public:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static const int YearBase = 2010;
static const int BaseYear = 1900;//Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>tm<74><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1900<30><30><EFBFBD><EFBFBD>1<EFBFBD><31>1<EFBFBD><31><EFBFBD>賿<EFBFBD><E8B3BF>ʼ<EFBFBD><CABC>
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ƿ<EFBFBD><C7B7>Ѿ<EFBFBD><D1BE><EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD>ı<EFBFBD>־λ
static const unsigned int RecordFlag = 0x80000000;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>λ<EFBFBD><CEBB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static const unsigned int SecOfMin = 60;
static const unsigned int SecOfHour = SecOfMin * 60;
static const unsigned int SecOfDay = SecOfHour * 24;
static const unsigned int SecOfYear[2];
static const unsigned int SecOfMonth[2][13];//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±꣬<C2B1><EAA3AC>ȥ<EFBFBD>·<EFBFBD>-1<>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>
static const unsigned int MonthDays[2][13];//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±꣬<C2B1><EAA3AC>ȥ<EFBFBD>·<EFBFBD>-1<>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>
public:
SecondTime& encode(const unsigned int year, const unsigned int mon, const unsigned int day,
const unsigned int hour, const unsigned int min, const unsigned int sec);
// <20><>MiniDataTimeת<65><D7AA><EFBFBD><EFBFBD>ϵͳʱ<CDB3><EFBFBD><E4A1A3>ʱֻ<CAB1><D6BB>ȷ<EFBFBD><C8B7><EFBFBD>
void decode(tm& sysTime);
void decode(SYSTEMTIME& sysTime);
time_t decode() //ע<><EFBFBD><E2A3BA><EFBFBD><EFBFBD>tm<74><6D>decode<64><65>װת<D7B0><D7AA><EFBFBD>ӿڣ<D3BF><DAA3><EFBFBD><EFBFBD><EFBFBD>tm<74><6D><EFBFBD>޸<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽ӿ<CBBD>ҲҪ<D2B2>޸<EFBFBD>
{
tm hehe;
decode(hehe);
hehe.tm_year -= 1900; //***
hehe.tm_mon -= 1; //***
return mktime(&hehe);
}
inline bool isSameDay(const SecondTime& rhs)
{
return ((tv & (~RecordFlag)) / SecOfDay) == ((rhs.tv & (~RecordFlag)) / SecOfDay) ? true : false;
}
//<2F><>SystemTime<6D><EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ֵ
inline SecondTime& encode(time_t systime)
{
return encode(*localtime(&systime));
}
inline SecondTime& encode(const tm& sysTime)
{
return encode(1900 + sysTime.tm_year, sysTime.tm_mon + 1, sysTime.tm_mday, sysTime.tm_hour, sysTime.tm_min, sysTime.tm_sec);
}
inline SecondTime& encode(const SYSTEMTIME& sysTime)
{
return encode(sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
}
//<2F><>ʼ<EFBFBD><CABC>¼ʱ<C2BC>䣬timeOfNow<6F><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰʱ<C7B0><CAB1><EFBFBD>Ķ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
inline SecondTime& startRecord(const unsigned int timeOfNow)
{
if (!(tv & RecordFlag))
tv = RecordFlag | ((timeOfNow & (~RecordFlag)) + tv);
return *this;
}
bool isStartRecord()
{
return (tv & RecordFlag) ? true : false;
}
//<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ķ<EFBFBD>ʱ<EFBFBD><CAB1>ֵ
inline static unsigned int now()
{
SecondTime tv;
time_t timep;
struct tm* sysTime;
time(&timep);
sysTime = localtime(&timep);
tv.encode(1900 + sysTime->tm_year, sysTime->tm_mon + 1, sysTime->tm_mday, sysTime->tm_hour, sysTime->tm_min, sysTime->tm_sec);
return tv.tv;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>賿<EFBFBD><E8B3BF>ʱ<EFBFBD><CAB1>
inline static unsigned int today()
{
SecondTime tv;
time_t timep;
struct tm* sysTime;
time(&timep);
sysTime = localtime(&timep);
tv.encode(1900 + sysTime->tm_year, sysTime->tm_mon + 1, sysTime->tm_mday, 0, 0, 0);
return tv.tv;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>賿ʱ<E8B3BF><CAB1>
inline static unsigned int yesterday()
{
return today() - 3600 * 24;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>賿<EFBFBD><E8B3BF>ֵ
inline static unsigned int tomorrow()
{
return today() + 3600 * 24;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ǰMiniDateTime<6D><65>ָʾ<D6B8><CABE>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
inline unsigned int rel_tomorrow()
{
unsigned v = tv & (~RecordFlag);
v = (v + SecOfDay) / SecOfDay * SecOfDay;
return (tv & RecordFlag) | v;
}
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ǰMiniDateTime<6D><65>ָʾ<D6B8><CABE>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ǰ<EFBFBD><C7B0>ʼʱ<CABC><CAB1><EFBFBD><EFBFBD>
inline unsigned int rel_today()
{
unsigned v = tv & (~RecordFlag);
v = v / SecOfDay * SecOfDay;
return (tv & RecordFlag) | v;
}
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD>
inline static bool isLeapYear(const unsigned int year)
{
return ((year % 4) == 0) && ((year % 100 != 0) || (year % 400 == 0));
}
public:
//ת<><D7AA>Ϊunsigned int<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
inline operator unsigned int()
{
return tv;
}
//<2F><>unsigned int<6E><74><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
inline SecondTime& operator = (const unsigned int time)
{
tv = time;
return *this;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϵ<D0B6><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
inline bool operator == (const unsigned int time)
{
return tv == time;
}
//<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>жϵ<D0B6><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
inline bool operator != (const unsigned int time)
{
return tv != time;
}
inline bool operator > (const unsigned int time)
{
return (tv & (~RecordFlag)) > (time & (~RecordFlag));
}
inline bool operator >= (const unsigned int time)
{
return (tv & (~RecordFlag)) >= (time & (~RecordFlag));
}
inline bool operator < (const unsigned int time)
{
return (tv & (~RecordFlag)) < (time & (~RecordFlag));
}
inline bool operator <= (const unsigned int time)
{
return (tv & (~RecordFlag)) <= (time & (~RecordFlag));
}
//<2F><><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD>õı<C3B5>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
inline unsigned int operator + (const unsigned int time)
{
return ((tv & (~RecordFlag)) + (time & (~RecordFlag))) & (~RecordFlag);
}
//<2F><><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD>õı<C3B5>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
inline unsigned int operator - (const unsigned int time)
{
return ((tv & (~RecordFlag)) - (time & (~RecordFlag))) & (~RecordFlag);
}
//<2F><><EFBFBD><EFBFBD>+=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD>õı<C3B5>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
inline SecondTime& operator += (const unsigned int time)
{
tv = (tv & RecordFlag) | (((tv & (~RecordFlag)) + (time & (~RecordFlag))) & (~RecordFlag));
return *this;
}
//<2F><><EFBFBD><EFBFBD>-=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD>õı<C3B5>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
inline SecondTime& operator -= (const unsigned int time)
{
tv = (tv & RecordFlag) | (((tv & (~RecordFlag)) - (time & (~RecordFlag))) & (~RecordFlag));
return *this;
}
public:
SecondTime()
{
tv = 0;
}
SecondTime(const SecondTime& mt)
{
tv = mt.tv;
}
SecondTime(const unsigned int tva)
{
tv = tva;
}
public:
unsigned int tv;
};
#endif