1 /***************************************************************************
2 * Copyright (C) 2007 by www.databasecache.com *
3 * Contact: praba_tuty@databasecache.com *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 ***************************************************************************/
22 int TimeStamp::parseFrom(const char *s
) {
26 if(strcmp(s
,"now")==0 || strcmp(s
,"NOW")==0){
27 time_t cnow
= ::time(NULL
);
28 #if defined(SOLARIS) && defined(REMOTE_SOLARIS)
29 struct std::tm
*tmval
= (struct std::tm
*) localtime(&cnow
);
30 setDate(year
=tmval
->tm_year
+1900,month
=tmval
->tm_mon
+1,day
=tmval
->tm_mday
);
31 return setTime(hours
=tmval
->tm_hour
,mins
=tmval
->tm_min
,secs
=tmval
->tm_sec
);
33 struct tm
*tmval
= localtime(&cnow
);
34 setDate(year
=tmval
->tm_year
+1900,month
=tmval
->tm_mon
+1,day
=tmval
->tm_mday
);
35 return setTime(hours
=tmval
->tm_hour
,mins
=tmval
->tm_min
,secs
=tmval
->tm_sec
);
42 count
= sscanf(s
,"%d-%d-%d %d:%d:%d",&year
,&month
,&day
, &hours
, &mins
, &secs
);
46 count
= sscanf(s
,"%d/%d/%d %d:%d:%d",&year
,&month
,&day
, &hours
, &mins
, &secs
);
51 if (count
< 5) return -1;
52 if (count
== 5) secs
= 0;
53 if (year
< 100) year
+= 1900;
55 if (!date
.isValidDate(year
, month
, day
))
58 setDate(year
,month
,day
);
60 if (!time
.isValidTime(hours
,mins
,secs
))
62 return setTime(hours
,mins
,secs
);
66 void TimeStamp::addHour(int hours
)
68 int day
= time
.addHour(hours
);
69 if(day
!=0){ date
.addDay(day
);}
72 void TimeStamp::subHour(int hours
)
74 int day
= time
.subHour(hours
);
75 if(day
!=0){ date
.subDay(day
);}
78 void TimeStamp::addMin(int noOfMins
)
80 int day
= time
.addMin(noOfMins
);
81 if(day
!=0){ date
.addDay(day
);}
84 void TimeStamp::subMin(int noOfMins
)
86 int day
= time
.subMin(noOfMins
);
87 if(day
!=0) {date
.subDay(day
);}
90 void TimeStamp::addSec(int noOfSecs
)
92 int day
= time
.addSec(noOfSecs
);
93 if(day
!=0){ date
.addDay(day
);}
96 void TimeStamp::subSec(int noOfSecs
)
98 int day
= time
.subSec(noOfSecs
);
99 if(day
!=0){ date
.subDay(day
);}
102 int TimeStamp::secDiff(TimeStamp
&ts
)
104 int day1
= date
.getCalDay();
105 int day2
= Date(ts
).getCalDay();
106 int sec1
= time
.getCalSec();
107 int sec2
= Time(ts
).getCalSec();
108 return (((day1
*24*60*60)+sec1
) - ((day2
*24*60*60)+sec2
));
111 int TimeStamp::minDiff(TimeStamp
&ts
)
113 int day1
= date
.getCalDay();
114 int day2
= Date(ts
).getCalDay();
115 int sec1
= time
.getCalSec();
116 int sec2
= Time(ts
).getCalSec();
117 int secdiff
= (((day1
*24*60*60)+sec1
) - ((day2
*24*60*60)+sec2
));
122 int TimeStamp::hourDiff(TimeStamp
&ts
)
124 int day1
= date
.getCalDay();
125 int day2
= Date(ts
).getCalDay();
126 int sec1
= time
.getCalSec();
127 int sec2
= Time(ts
).getCalSec();
128 int secdiff
= (((day1
*24*60*60)+sec1
) - ((day2
*24*60*60)+sec2
));
129 return (secdiff
/3600);
132 int TimeStamp::dayDiff(TimeStamp
&ts
)
134 int day1
= date
.getCalDay();
135 int day2
= Date(ts
).getCalDay();
136 int sec1
= time
.getCalSec();
137 int sec2
= Time(ts
).getCalSec();
138 int secdiff
= (((day1
*24*60*60)+sec1
) - ((day2
*24*60*60)+sec2
));
139 return (secdiff
/(3600*24));
143 int TimeStamp::monthDiff(TimeStamp
&ts
)
145 int day1
= date
.getCalDay();
146 int day2
= Date(ts
).getCalDay();
147 int sec1
= time
.getCalSec();
148 int sec2
= Time(ts
).getCalSec();
149 int secdiff
= (((day1
*24*60*60)+sec1
) - ((day2
*24*60*60)+sec2
));
150 return (secdiff
/(3600*24*30));
154 int TimeStamp::yearDiff(TimeStamp
&ts
)
156 int day1
= date
.getCalDay();
157 int day2
= Date(ts
).getCalDay();
158 int sec1
= time
.getCalSec();
159 int sec2
= Time(ts
).getCalSec();
160 int secdiff
= (((day1
*24*60*60)+sec1
) - ((day2
*24*60*60)+sec2
));
161 return (secdiff
/(3600*24*30*12));
164 void TimeStamp::changeToCsqlFormat(char *src
)
171 strncpy(dstPtr
, srcPtr
, 4);
175 if(strncasecmp(srcPtr
,"JAN",3) == 0) strncpy(dstPtr
, "01", 2);
176 else if(strncasecmp(srcPtr
,"FEB",3)== 0) strncpy(dstPtr
, "02", 2);
177 else if(strncasecmp(srcPtr
,"MAR",3)== 0) strncpy(dstPtr
, "03", 2);
178 else if(strncasecmp(srcPtr
,"APR",3)== 0) strncpy(dstPtr
, "04", 2);
179 else if(strncasecmp(srcPtr
,"MAY",3)== 0) strncpy(dstPtr
, "05", 2);
180 else if(strncasecmp(srcPtr
,"JUN",3)== 0) strncpy(dstPtr
, "06", 2);
181 else if(strncasecmp(srcPtr
,"JUL",3)== 0) strncpy(dstPtr
, "07", 2);
182 else if(strncasecmp(srcPtr
,"AUG",3)== 0) strncpy(dstPtr
, "08", 2);
183 else if(strncasecmp(srcPtr
,"SEP",3)== 0) strncpy(dstPtr
, "09", 2);
184 else if(strncasecmp(srcPtr
,"OCT",3)== 0) strncpy(dstPtr
, "10", 2);
185 else if(strncasecmp(srcPtr
,"NOV",3)== 0) strncpy(dstPtr
, "11", 2);
186 else if(strncasecmp(srcPtr
,"DEC",3)== 0) strncpy(dstPtr
, "12", 2);
189 strncpy(dstPtr
, src
, 2);
192 strncpy(dstPtr
, srcPtr
, 9);
198 int operator< (const TimeStamp
&d1
, const TimeStamp
&d2
)
199 { return (d1
.date
!= d2
.date
) ? d1
.date
< d2
.date
: d1
.time
< d2
.time
; }
200 int operator> (const TimeStamp
&d1
, const TimeStamp
&d2
)
201 { return (d1
.date
!= d2
.date
) ? d1
.date
> d2
.date
: d1
.time
> d2
.time
; }
202 int operator<=(const TimeStamp
&d1
, const TimeStamp
&d2
)
203 { return (d1
.date
!= d2
.date
) ? d1
.date
< d2
.date
: d1
.time
<= d2
.time
; }
204 int operator>=(const TimeStamp
&d1
, const TimeStamp
&d2
)
205 { return (d1
.date
!= d2
.date
) ? d1
.date
> d2
.date
: d1
.time
>= d2
.time
; }
206 int operator==(const TimeStamp
&d1
, const TimeStamp
&d2
)
207 { return d1
.date
== d2
.date
&& d1
.time
== d2
.time
; }
208 int operator!=(const TimeStamp
&d1
, const TimeStamp
&d2
)
209 { return d1
.date
!= d2
.date
|| d1
.time
!= d2
.time
; }