9
RarTime& RarTime::operator =(FILETIME &ft)
12
FileTimeToLocalFileTime(&ft,&lft);
14
FileTimeToSystemTime(&lft,&st);
19
rlt.Minute=st.wMinute;
20
rlt.Second=st.wSecond;
21
rlt.wDay=st.wDayOfWeek;
23
for (int I=1;I<rlt.Month;I++)
25
static int mdays[12]={31,28,31,30,31,30,31,31,30,31,30,31};
28
if (rlt.Month>2 && IsLeapYear(rlt.Year))
32
SystemTimeToFileTime(&st,&zft);
33
rlt.Reminder=lft.dwLowDateTime-zft.dwLowDateTime;
38
void RarTime::GetWin32(FILETIME *ft)
45
st.wMinute=rlt.Minute;
46
st.wSecond=rlt.Second;
49
SystemTimeToFileTime(&st,&lft);
50
lft.dwLowDateTime+=rlt.Reminder;
51
if (lft.dwLowDateTime<rlt.Reminder)
53
LocalFileTimeToFileTime(&lft,ft);
58
#if defined(_UNIX) || defined(_EMX)
59
RarTime& RarTime::operator =(time_t ut)
64
rlt.Year=t->tm_year+1900;
65
rlt.Month=t->tm_mon+1;
77
time_t RarTime::GetUnix()
86
t.tm_year=rlt.Year-1900;
93
Int64 RarTime::GetRaw()
100
return(int32to64(ft.dwHighDateTime,ft.dwLowDateTime));
101
#elif defined(_UNIX) || defined(_EMX)
103
return(int32to64(0,ut)*10000000+rlt.Reminder);
111
void RarTime::SetRaw(Int64 RawTime)
115
ft.dwHighDateTime=int64to32(RawTime>>32);
116
ft.dwLowDateTime=int64to32(RawTime);
118
#elif defined(_UNIX) || defined(_EMX)
119
time_t ut=int64to32(RawTime/10000000);
121
rlt.Reminder=RawTime%10000000;
127
bool RarTime::operator == (RarTime &rt)
129
return(rlt.Year==rt.rlt.Year && rlt.Month==rt.rlt.Month &&
130
rlt.Day==rt.rlt.Day && rlt.Hour==rt.rlt.Hour &&
131
rlt.Minute==rt.rlt.Minute && rlt.Second==rt.rlt.Second &&
132
rlt.Reminder==rt.rlt.Reminder);
136
bool RarTime::operator < (RarTime &rt)
138
return(GetRaw()<rt.GetRaw());
142
bool RarTime::operator <= (RarTime &rt)
144
return(*this<rt || *this==rt);
148
bool RarTime::operator > (RarTime &rt)
150
return(GetRaw()>rt.GetRaw());
154
bool RarTime::operator >= (RarTime &rt)
156
return(*this>rt || *this==rt);
160
uint RarTime::GetDos()
162
uint DosTime=(rlt.Second/2)|(rlt.Minute<<5)|(rlt.Hour<<11)|
163
(rlt.Day<<16)|(rlt.Month<<21)|((rlt.Year-1980)<<25);
168
void RarTime::SetDos(uint DosTime)
170
rlt.Second=(DosTime & 0x1f)*2;
171
rlt.Minute=(DosTime>>5) & 0x3f;
172
rlt.Hour=(DosTime>>11) & 0x1f;
173
rlt.Day=(DosTime>>16) & 0x1f;
174
rlt.Month=(DosTime>>21) & 0x0f;
175
rlt.Year=(DosTime>>25)+1980;
180
#if !defined(GUI) || !defined(SFX_MODULE)
181
void RarTime::GetText(char *DateStr,bool FullYear)
184
sprintf(DateStr,"%02u-%02u-%u %02u:%02u",rlt.Day,rlt.Month,rlt.Year,rlt.Hour,rlt.Minute);
186
sprintf(DateStr,"%02u-%02u-%02u %02u:%02u",rlt.Day,rlt.Month,rlt.Year%100,rlt.Hour,rlt.Minute);
192
void RarTime::SetIsoText(char *TimeText)
195
memset(Field,0,sizeof(Field));
196
for (int DigitCount=0;*TimeText!=0;TimeText++)
197
if (isdigit(*TimeText))
199
int FieldPos=DigitCount<4 ? 0:(DigitCount-4)/2+1;
200
if (FieldPos<sizeof(Field)/sizeof(Field[0]))
201
Field[FieldPos]=Field[FieldPos]*10+*TimeText-'0';
207
rlt.Day=Field[2]==0 ? 1:Field[2];
208
rlt.Month=Field[1]==0 ? 1:Field[1];
216
void RarTime::SetAgeText(char *TimeText)
218
uint Seconds=0,Value=0;
219
for (int I=0;TimeText[I]!=0;I++)
223
Value=Value*10+Ch-'0';
229
Seconds+=Value*24*3600;
245
Int64 RawTime=GetRaw();
246
SetRaw(RawTime-int32to64(0,Seconds)*10000000);
252
void RarTime::SetCurrentTime()
258
SystemTimeToFileTime(&st,&ft);
269
#if !defined(SFX_MODULE) && !defined(_WIN_CE)
270
const char *GetMonthName(int Month)
275
static MSGID MonthID[]={
276
MMonthJan,MMonthFeb,MMonthMar,MMonthApr,MMonthMay,MMonthJun,
277
MMonthJul,MMonthAug,MMonthSep,MMonthOct,MMonthNov,MMonthDec
279
return(St(MonthID[Month]));
285
bool IsLeapYear(int Year)
287
return((Year&3)==0 && (Year%100!=0 || Year%400==0));