Files
firestorm/Gameleap/code/Launcher/ctime.cpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

192 lines
3.8 KiB
C++

#include "stdafx.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/*
BOOL IsLeapYear(int nYear)
{
// nYear is in Solar system, 1982...
if (nYear % 4 == 0) {
if (nYear % 100 == 0) {
if (nYear % 400 == 0) {
//...
return FALSE;
}
}
return TRUE;
}
return FALSE;
}
int GetDayEnd(int nYear, int nMonth)
{
int nDayEnd;
if (nMonth == 2) {
nDayEnd = 28;
if (IsLeapYear(nYear)) {
nDayEnd++;
} else {
// 28
}
} else {
nDayEnd = 30;
if ((nMonth == 1) || (nMonth == 3) || (nMonth == 5) || (nMonth == 7) || (nMonth == 8) || (nMonth == 10) || (nMonth == 12))
nDayEnd++; // 31
}
return nDayEnd;
}
long GetTotalSeconds(int nYear, int nMonth, int nDay)
{
// nYear, nMonth, nDay날의 0시 0분 0초를 0으로 한 초단위 수...
ASSERT(nYear >= 1970);
ASSERT((1 <= nMonth) && (nMonth <= 12));
ASSERT(1 <= nDay);
ASSERT(nDay <= GetDayEnd(nYear, nMonth));
long lTotal = 0;
int nStart;
for(nStart = 1970; nStart < nYear; nStart++) {
int nDays = 365;
if (IsLeapYear(nStart)) {
nDays++;
}
lTotal += nDays * 24 * 60 * 60; // 24시간 60분 60초
}
for(nStart = 1; nStart < nMonth; nStart++) {
int nDayEnd = GetDayEnd(nYear, nStart);
lTotal += nDayEnd * 24 * 60 * 60; // 24시간 60분 60초
}
lTotal += (nDay - 1) * 24 * 60 * 60; // 24시간 60분 60초
return lTotal;
}
*/
BOOL CTimeDate::IsLeapYear(int nYear)
{
// nYear is in Solar system, 1982...
if (nYear % 4 == 0) {
if (nYear % 100 == 0) {
if (nYear % 400 == 0) {
//...
return FALSE;
}
}
return TRUE;
}
return FALSE;
}
long CTimeDate::GetCurrent()
{
CTimeDate t;
t.CurrentDate();
return t.m_lDate;
}
void CTimeDate::CurrentDate()
{
ASSERT(this);
time_t t;
struct tm* p;
time(&t);
p = localtime(&t);
m_lDate = 0;
m_LN.m_xDay = p->tm_mday - 1;
m_LN.m_xMonth = p->tm_mon;
m_LN.m_xYear = (p->tm_year + 1900) - TIMEDATE_YEAR_BASE;
//m_LN.m_xReserved = 0;
//m_LN.m_xLunar = 0;
//m_LN.m_xLeap = 0;
}
BOOL CTimeDate::GetDate(long lDate, BOOL bLunar/* = FALSE*/, BOOL bLeap/* = FALSE*/)
{
ASSERT(!bLunar && !bLeap); // not yet implemented...
int nDay = lDate % 100;
lDate /= 100;
int nMonth = lDate % 100;
lDate /= 100;
int nYear = lDate;
BOOL bLeapYear = IsLeapYear(nYear);
nYear -= TIMEDATE_YEAR_BASE;
if ((nYear < 0) || (nYear >= (1 << TIMEDATE_YEAR_BITS)))
return FALSE;
if (!((1 <= nMonth) && (nMonth <= 12))) {
return FALSE;
}
int nDayMax = 30;
switch(nMonth) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
nDayMax++; // 31
break;
case 2:
nDayMax--; // 29
if (!bLeapYear) {
nDayMax--; // 28
}
break;
default:
break;
}
if (!((1 <= nDay) && (nDay <= nDayMax))) {
return FALSE;
}
nMonth--;
nDay--;
m_lDate = 0;
m_LN.m_xYear = nYear;
m_LN.m_xMonth = nMonth;
m_LN.m_xDay = nDay;
//m_LN.m_xReserved = 0;
//m_LN.m_xLunar = 0;
//m_LN.m_xLeap = 0;
return TRUE;
}
long CTimeLong::GetCurrent()
{
CTimeLong t;
t.CurrentTime();
return t.m_lTime;
}
void CTimeLong::CurrentTime()
{
ASSERT(this);
time_t t;
time(&t);
m_lTime = t;
}
void CTimeLong::GetTime(tm& t) const
{
ASSERT(this);
t = *localtime(&m_lTime);
}