DragonNest/Common/Utility/TimeSet.h

156 lines
6.4 KiB
C
Raw Normal View History

2024-12-19 09:48:26 +08:00
/*//===============================================================
<< TIME SET >>
FILE : TIMESET.H, TIMESET.CPP
DESC : <EFBFBD>ð<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INIT BUILT DATE : 2007. 04. 22
LAST BUILT DATE : 2008. 05. 29
P.S.>
- tm <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int tm_sec : <EFBFBD><EFBFBD> (0 ~ 59) (*)
int tm_min : <EFBFBD><EFBFBD> 0 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 59 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>(minute) (*)
int tm_hour : <EFBFBD><EFBFBD> 0 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 23<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>(hours) (*)
int tm_mday : <EFBFBD><EFBFBD> (<EFBFBD>Ѵ<EFBFBD><EFBFBD>ֱ<EFBFBD>, 1 ~ 31) (*)
int tm_mon : <EFBFBD><EFBFBD> (0 ~ 11) (*)
int tm_year : <EFBFBD><EFBFBD> (1900<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (*)
int tm_wday : <EFBFBD><EFBFBD> (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>, 0 ~ 6)
int tm_yday : <EFBFBD><EFBFBD> (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>, 0 ~ 365)
int tm_isdst : <EFBFBD>ϱ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ð<EFBFBD><EFBFBD><EFBFBD> (<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD>) <EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD>
P.S.> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ڿ<EFBFBD> (*) <EFBFBD><EFBFBD> <EFBFBD>ٴ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> __time32_t, __time64_t <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ȯ <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ְ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- DBTIMESTAMP <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SHORT year : <EFBFBD><EFBFBD> (A.D. <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 ~ 9999)
USHORT month : <EFBFBD><EFBFBD> (1 ~ 12)
USHORT day : <EFBFBD><EFBFBD> (1 ~ 31)
USHORT hour : <EFBFBD><EFBFBD> (0 ~ 23)
USHORT minute : <EFBFBD><EFBFBD> (0 ~ 59)
USHORT second : <EFBFBD><EFBFBD> (0 ~ 59)
ULONG fraction : <EFBFBD><EFBFBD><EFBFBD>е<EFBFBD> (1/10<EFBFBD><EFBFBD> <EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD> ǥ<EFBFBD><EFBFBD>, 0 ~ 999,999,999)
- __time32_t <EFBFBD><EFBFBD><EFBFBD>е<EFBFBD> : 1970-01-01 00:00:00 ~ 2038-01-18 12:14:07
- __time64_t <EFBFBD><EFBFBD><EFBFBD>е<EFBFBD> : 1970-01-01 00:00:00 ~ 2999-12-31 23:59:59
Copyright<EFBFBD><EFBFBD> 2002~2009 B4nFter (b4nfter@gmail.com) and Co-Writers. All Rights Reserved.
*///===============================================================
#pragma once
///////////////////////////////////////////////////////////////////
// INCLUDE
///////////////////////////////////////////////////////////////////
#include <WINDOWS.H>
#include <OLEDB.H>
#include <sqltypes.h>
///////////////////////////////////////////////////////////////////
// DEFINE
///////////////////////////////////////////////////////////////////
#define DF_TM_YEAR_EPOCH (1900) // tm <20><><EFBFBD><EFBFBD>ü <20><20><><EFBFBD><EFBFBD> <20><>
#define DF_TIME32_MAX (0x7FFFFFFF) // __time32_t <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ밪
#define DF_TIME64_MAX (0x00000007933FF16F) // __time64_t <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ밪
///////////////////////////////////////////////////////////////////
// DECLARATION
///////////////////////////////////////////////////////////////////
//*---------------------------------------------------------------
// TYPE : CLASS
// NAME : CTimeSet
//*---------------------------------------------------------------
// DESC : <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
// PRGM : B4nFter
//*---------------------------------------------------------------
class CTimeSet
{
public:
// SYSTEMTIME::wDayOfWeek <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20><>
enum EF_DAYOFWEEK { EV_DAYOFWEEK_SUN=0, EV_DAYOFWEEK_MON, EV_DAYOFWEEK_TUE, EV_DAYOFWEEK_WEN, EV_DAYOFWEEK_THU, EV_DAYOFWEEK_FRI, EV_DAYOFWEEK_SAT };
public:
CTimeSet();
CTimeSet(WORD wYear, WORD wMonth, WORD wDay, WORD wHour, WORD wMinute, WORD wSecond);
CTimeSet(const __time32_t& pTime, bool pIsLocal); // 20100506
CTimeSet(const __time64_t& pTime, bool pIsLocal); // 20100506
CTimeSet(const char* szTime, bool pIsLocal); // 20110104 by robust
explicit CTimeSet(const FILETIME& stTime);
explicit CTimeSet(const SYSTEMTIME& stTime);
explicit CTimeSet(const DBTIMESTAMP& stTime);
public:
WORD GetYear() const { return m_stLocalTime.wYear; }
WORD GetMonth() const { return m_stLocalTime.wMonth; }
WORD GetDay() const { return m_stLocalTime.wDay; }
WORD GetHour() const { return m_stLocalTime.wHour; }
WORD GetMinute() const { return m_stLocalTime.wMinute; }
WORD GetSecond() const { return m_stLocalTime.wSecond; }
WORD GetMilliseconds() const { return m_stLocalTime.wMilliseconds; }
WORD GetDayOfWeek() const { return m_stLocalTime.wDayOfWeek ; }
const SYSTEMTIME& GetSystemTime() const { return m_stLocalTime; }
SYSTEMTIME& GetSystemTime() { return m_stLocalTime; }
__time32_t GetTimeT32_LC() const; // 20100506
__time64_t GetTimeT64_LC() const; // 20100506
__time32_t GetTimeT32_GM() const; // 20100506
__time64_t GetTimeT64_GM() const; // 20100506
TIMESTAMP_STRUCT& GetDBTimeStampStruct();
DBTIMESTAMP& GetDbTimeStamp();
DBDATE& GetDBDate();
EF_DAYOFWEEK CalculateDayOfWeek(); // 20100728
VOID Reset();
VOID Set(WORD wYear, WORD wMonth, WORD wDay, WORD wHour, WORD wMinute,WORD wSecond);
VOID Set(const __time32_t& pTime, bool pIsLocal);
VOID Set(const __time64_t& pTime, bool pIsLocal);
VOID Set(const FILETIME& stTime);
VOID Set(const SYSTEMTIME& stTime);
VOID Set(const DBTIMESTAMP& stTime);
DWORD GetTimeTo(EF_DAYOFWEEK eDayOfWeek, WORD wHour, WORD wMinute, WORD wSecond); // <20>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD> : <20><> (<28><><EFBFBD><EFBFBD>:1/1000<30><30>)
DWORD GetTimeTo(WORD wHour, WORD wMinute, WORD wSecond); // <20>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD> : <20><> (<28><><EFBFBD><EFBFBD>:1/1000<30><30>)
DWORD GetTimeTo(WORD wMinute, WORD wSecond); // <20>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD> : <20>ð<EFBFBD> (<28><><EFBFBD><EFBFBD>:1/1000<30><30>)
INT CompareFileTime(const FILETIME& stFileTime1, const FILETIME& stFileTime2); // stFileTime1 <20><> stFileTime2 <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ū<><C5AB> <20><><EFBFBD><EFBFBD> (-1:ù<><C3B9>°ŭ / 0:<3A><><EFBFBD><EFBFBD> / 1:<3A>ι<EFBFBD>°ŭ)
BOOL CheckIntegrity();
VOID AddSecond(INT64 ui64Second); // 20100728
INT64 operator-(const CTimeSet& pTime) const;
static VOID ConvertFileTimeToDbTimeStamp(const FILETIME* lpFileTime, DBTIMESTAMP* lpDbTime);
static VOID ConvertDbTimeStampToFileTime(const DBTIMESTAMP* lpDbTime, FILETIME* lpFileTime);
static __time32_t ConvertTmToTimeT32_LC(tm* lpTm);
static __time64_t ConvertTmToTimeT64_LC(tm* lpTm);
static __time32_t ConvertTmToTimeT32_GM(tm* lpTm);
static __time64_t ConvertTmToTimeT64_GM(tm* lpTm);
static __time32_t ConvertDbTimeStampToTimeT32_LC(const DBTIMESTAMP* lpDbTime);
static __time64_t ConvertDbTimeStampToTimeT64_LC(const DBTIMESTAMP* lpDbTime);
static __time32_t ConvertDbTimeStampToTimeT32_GM(const DBTIMESTAMP* lpDbTime);
static __time64_t ConvertDbTimeStampToTimeT64_GM(const DBTIMESTAMP* lpDbTime);
static BOOL ConvertTimeT32ToTm_LC(__time32_t pTimeT32, tm* lpTm);
static BOOL ConvertTimeT64ToTm_LC(__time64_t pTimeT64, tm* lpTm);
static BOOL ConvertTimeT32ToTm_GM(__time32_t pTimeT32, tm* lpTm);
static BOOL ConvertTimeT64ToTm_GM(__time64_t pTimeT64, tm* lpTm);
static BOOL ConvertTimeT32ToDbTimeStamp_LC(__time32_t pTimeT32, DBTIMESTAMP* lpDbTime);
static BOOL ConvertTimeT64ToDbTimeStamp_LC(__time64_t pTimeT64, DBTIMESTAMP* lpDbTime);
static BOOL ConvertTimeT32ToDbTimeStamp_GM(__time32_t pTimeT32, DBTIMESTAMP* lpDbTime);
static BOOL ConvertTimeT64ToDbTimeStamp_GM(__time64_t pTimeT64, DBTIMESTAMP* lpDbTime);
static EF_DAYOFWEEK CalculateDayOfWeek(WORD wYear, WORD wMonth, WORD wDay); // 20100728
private:
SYSTEMTIME m_stLocalTime; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>
TIMESTAMP_STRUCT m_DBTimeStampStruct;
DBTIMESTAMP m_stDbTimeStamp; // <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ӽú<D3BD><C3BA><EFBFBD>
DBDATE m_DBDate;
};