Files
Work/common/Systime.cpp
2024-08-07 09:09:36 -04:00

176 lines
3.9 KiB
C++

#include <common/systime.hpp>
String SystemTime::toString(void)const
{
String systemTime;
String dayString;
String monthString;
getMonth(monthString);
getDay(dayString);
::sprintf(systemTime,"%s%s %d,%d %02d:%02d:%02d",(LPSTR)dayString,(LPSTR)monthString,day(),year(),hour(),minute(),second());
return systemTime;
}
String SystemTime::toStringShort(void)const
{
String systemTime;
String dayString;
String monthString;
getMonth(monthString);
getDay(dayString,true);
::sprintf(systemTime,"%s%s %d,%d %02d:%02d:%02d",(LPSTR)dayString,(LPSTR)monthString,day(),year(),hour(),minute(),second());
return systemTime;
}
bool SystemTime::operator>(const SystemTime &someSystemTime)const
{
if(year()>someSystemTime.year())return TRUE;
else if(year()<someSystemTime.year())return FALSE;
if(month()>someSystemTime.month())return TRUE;
else if(month()<someSystemTime.month())return FALSE;
if(day()>someSystemTime.day())return TRUE;
else if(day()<someSystemTime.day())return FALSE;
if(hour()>someSystemTime.hour())return TRUE;
else if(hour()<someSystemTime.hour())return FALSE;
if(minute()>someSystemTime.minute())return TRUE;
else if(minute()<someSystemTime.minute())return FALSE;
if(second()>someSystemTime.second())return TRUE;
else if(second()<someSystemTime.second())return FALSE;
if(milliseconds()>someSystemTime.milliseconds())return TRUE;
return FALSE;
}
bool SystemTime::operator<(const SystemTime &someSystemTime)const
{
if(*this>someSystemTime)return FALSE;
if(*this==someSystemTime)return FALSE;
return TRUE;
}
void SystemTime::makeTime(WORD year,WORD month,WORD day,WORD hour,WORD minute,WORD second)
{
WORD wFatDate;
WORD wFatTime;
FILETIME fileTime;
wFatDate=day;
wFatDate|=(month<<5);
wFatDate|=((year-1980)<<9);
wFatTime=second/2;
wFatTime|=(minute<<5);
wFatTime|=(hour<<11);
::DosDateTimeToFileTime(wFatDate,wFatTime,&fileTime);
::FileTimeToSystemTime(&fileTime,&((SYSTEMTIME&)*this));
}
void SystemTime::getMonth(String &monthString)const
{
switch(month())
{
case January :
monthString="January";
break;
case February :
monthString="February";
break;
case March :
monthString="March";
break;
case April :
monthString="April";
break;
case May :
monthString="May";
break;
case June :
monthString="June";
break;
case July :
monthString="July";
break;
case August :
monthString="August";
break;
case September :
monthString="September";
break;
case October :
monthString="October";
break;
case November :
monthString="November";
break;
case December :
monthString="December";
break;
}
}
void SystemTime::getDay(String &dayString,bool shortName)const
{
switch(dayOfWeek())
{
case Monday :
if(shortName)dayString="Mon";
else dayString="Monday";
break;
case Tuesday :
if(shortName)dayString="Tue";
else dayString="Tuesday";
break;
case Wednesday :
if(shortName)dayString="Wed";
else dayString="Wednesday";
break;
case Thursday :
if(shortName)dayString="Thu";
else dayString="Thursday";
break;
case Friday :
if(shortName)dayString="Fri";
else dayString="Friday";
break;
case Saturday :
if(shortName)dayString="Sat";
else dayString="Saturday";
break;
case Sunday :
if(shortName)dayString="Sun";
else dayString="Sunday";
break;
default :
dayString="unknown";
break;
}
dayString+=", ";
}
void SystemTime::daysAdd360(short dayCount)
{
long totalDays;
WORD isThirtyFirst;
if(!year()&&!day()&&!month()||!dayCount)return;
isThirtyFirst=LongestDaysInMonth==day();
if(isThirtyFirst)day(LongestDaysInMonth-1);
totalDays=360*(long)year()+30*(long)month()+(long)day()+dayCount-391;
day((short)(totalDays%30)+1);
month(Month((short)(totalDays/30)%12+1));
year((short)(totalDays/360)+1);
if(!(dayCount%30)&&isThirtyFirst)
switch(month())
{
case January :
case March :
case May :
case July :
case August :
case October :
case December :
day(day()+1);
break;
}
}