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;
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=int64to32(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 unsigned 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));