Main Page   Class Hierarchy   Compound List   File List   Compound Members  

datetime.h

00001 //-< DATEIME.H >-----------------------------------------------------*--------*
00002 // FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *
00003 // (Main Memory Database Management System)                          *   /\|  *
00004 //                                                                   *  /  \  *
00005 //                          Created:     20-Nov-98    K.A. Knizhnik  * / [] \ *
00006 //                          Last update: 10-Dec-98    K.A. Knizhnik  * GARRET *
00007 //-------------------------------------------------------------------*--------*
00008 // Date-time field type
00009 //-------------------------------------------------------------------*--------*
00010 
00011 #ifndef __DATETIME_H__
00012 #define __DATETIME_H__
00013 
00014 #include "stdtp.h"
00015 #include "class.h"
00016 
00017 BEGIN_FASTDB_NAMESPACE
00018 
00019 class FASTDB_DLL_ENTRY dbDateTime { 
00020     int4 stamp;
00021   public:
00022     bool operator == (dbDateTime const& dt) const { 
00023         return stamp == dt.stamp;
00024     }
00025     bool operator != (dbDateTime const& dt) const { 
00026         return stamp != dt.stamp;
00027     }
00028     bool operator > (dbDateTime const& dt) const { 
00029         return stamp > dt.stamp;
00030     }
00031     bool operator >= (dbDateTime const& dt) const { 
00032         return stamp >= dt.stamp;
00033     }
00034     bool operator < (dbDateTime const& dt) const { 
00035         return stamp < dt.stamp;
00036     }
00037     bool operator <= (dbDateTime const& dt) const { 
00038         return stamp <= dt.stamp;
00039     }
00040     int operator - (dbDateTime const& dt) const { 
00041         return stamp - dt.stamp;
00042     }
00043     int operator + (dbDateTime const& dt) const { 
00044         return stamp + dt.stamp;
00045     }
00046     static dbDateTime current() { 
00047         return dbDateTime(time(NULL));
00048     }
00049     dbDateTime(time_t tm) {
00050         stamp = (int4)tm;
00051     }
00052     dbDateTime() { 
00053         stamp = -1;
00054     } 
00055     bool isValid() const { 
00056         return stamp != -1;
00057     }
00058 
00059     time_t asTime_t() const { return stamp; }
00060 
00061     void clear() { stamp = -1; }
00062 
00063     dbDateTime(int year, int month, int day, 
00064                int hour=0, int min=0, int sec = 0) 
00065     { 
00066         struct tm t;
00067         t.tm_year = year > 1900 ? year - 1900 : year;
00068         t.tm_mon = month-1;
00069         t.tm_mday = day;
00070         t.tm_hour = hour;
00071         t.tm_min = min;
00072         t.tm_sec = sec;
00073         t.tm_isdst = -1;
00074         stamp = (int4)mktime(&t);
00075     }
00076     dbDateTime(int hour, int min) { 
00077         stamp = (hour*60+min)*60;
00078     }
00079 
00080 #if defined(HAVE_LOCALTIME_R) && !defined(NO_PTHREADS)
00081     int year() { 
00082         struct tm t;
00083         time_t tt = (nat4)stamp;
00084         return localtime_r(&tt, &t)->tm_year + 1900;
00085     }
00086     int month() { // 1..12
00087         struct tm t;
00088         time_t tt = (nat4)stamp;
00089         return localtime_r(&tt, &t)->tm_mon + 1;
00090     }
00091     int day() { // 1..31
00092         struct tm t;
00093         time_t tt = (nat4)stamp;
00094         return localtime_r(&tt, &t)->tm_mday;
00095     }
00096     int dayOfYear() { // 1..366
00097         struct tm t;
00098         time_t tt = (nat4)stamp;
00099         return localtime_r(&tt, &t)->tm_yday+1;
00100     }
00101     int dayOfWeek() { // 1..7
00102         struct tm t;
00103         time_t tt = (nat4)stamp;
00104         return localtime_r(&tt, &t)->tm_wday+1;
00105     }
00106     int hour() { // 0..24
00107         struct tm t;
00108         time_t tt = (nat4)stamp;
00109         return localtime_r(&tt, &t)->tm_hour;
00110     }
00111     int minute() { // 0..59
00112         struct tm t;
00113         time_t tt = (nat4)stamp;
00114         return localtime_r(&tt, &t)->tm_min;
00115     }
00116     int second() { // 0..59
00117         struct tm t;
00118         time_t tt = (nat4)stamp;
00119         return localtime_r(&tt, &t)->tm_sec;
00120     }
00121     char* asString(char* buf, int buf_size, char const* format = "%c") const { 
00122         struct tm t;
00123         time_t tt = (nat4)stamp;
00124         strftime(buf, buf_size, format, localtime_r(&tt, &t));
00125         return buf;
00126     }
00127     static dbDateTime currentDate() { 
00128         struct tm t;
00129         time_t curr = time(NULL);
00130         localtime_r(&curr, &t);
00131         t.tm_hour = 0;
00132         t.tm_min = 0;
00133         t.tm_sec = 0;
00134         return dbDateTime(mktime(&t));
00135     }
00136 #else
00137     int year() { 
00138         time_t tt = (nat4)stamp;
00139         return localtime(&tt)->tm_year + 1900;
00140     }
00141     int month() { // 1..12
00142         time_t tt = (nat4)stamp;
00143         return localtime(&tt)->tm_mon + 1;
00144     }
00145     int day() { // 1..31
00146         time_t tt = (nat4)stamp;
00147         return localtime(&tt)->tm_mday;
00148     }
00149     int dayOfYear() { // 1..366
00150         time_t tt = (nat4)stamp;
00151         return localtime(&tt)->tm_yday+1;
00152     }
00153     int dayOfWeek() { // 1..7
00154         time_t tt = (nat4)stamp;
00155         return localtime(&tt)->tm_wday+1;
00156     }
00157     int hour() { // 0..24
00158         time_t tt = (nat4)stamp;
00159         return localtime(&tt)->tm_hour;
00160     }
00161     int minute() { // 0..59
00162         time_t tt = (nat4)stamp;
00163         return localtime(&tt)->tm_min;
00164     }
00165     int second() { // 0..59
00166         time_t tt = (nat4)stamp;
00167         return localtime(&tt)->tm_sec;
00168     }
00169     char* asString(char* buf, int buf_size, char const* format = "%c") const { 
00170         time_t tt = (nat4)stamp;
00171 #ifdef _WINCE
00172         struct tm* t = localtime(&tt);
00173         char cnvBuf[CNV_BUF_SIZE];
00174         sprintf(cnvBuf, "%02d/02d/%40d %02d:%02d:%02d", t->tm_mon, t->tm_yday+1, t->tm_year + 1900,
00175                 t->tm_hour, t->tm_min, t->tm_sec);
00176         strncpy(buf, cnvBuf, buf_size);
00177 #else
00178         strftime(buf, buf_size, format, localtime(&tt));
00179 #endif
00180         return buf;
00181     }
00182     static dbDateTime currentDate() { 
00183         time_t curr = time(NULL);
00184         struct tm* tp = localtime(&curr);;
00185         tp->tm_hour = 0;
00186         tp->tm_min = 0;
00187         tp->tm_sec = 0;
00188         return dbDateTime(mktime(tp));
00189     }
00190 #endif    
00191 
00192     CLASS_DESCRIPTOR(dbDateTime, 
00193                      (KEY(stamp,INDEXED|HASHED), 
00194                       METHOD(year), METHOD(month), METHOD(day),
00195                       METHOD(dayOfYear), METHOD(dayOfWeek),
00196                       METHOD(hour), METHOD(minute), METHOD(second)));
00197 
00198     dbQueryExpression operator == (char const* field) { 
00199         dbQueryExpression expr;
00200         expr = dbComponent(field,"stamp"),"=",stamp;
00201         return expr;
00202     }
00203     dbQueryExpression operator != (char const* field) { 
00204         dbQueryExpression expr;
00205         expr = dbComponent(field,"stamp"),"<>",stamp;
00206         return expr;
00207     }
00208     dbQueryExpression operator < (char const* field) { 
00209         dbQueryExpression expr;
00210         expr = dbComponent(field,"stamp"),">",stamp;
00211         return expr;
00212     }
00213     dbQueryExpression operator <= (char const* field) { 
00214         dbQueryExpression expr;
00215         expr = dbComponent(field,"stamp"),">=",stamp;
00216         return expr;
00217     }
00218     dbQueryExpression operator > (char const* field) { 
00219         dbQueryExpression expr;
00220         expr = dbComponent(field,"stamp"),"<",stamp;
00221         return expr;
00222     }
00223     dbQueryExpression operator >= (char const* field) { 
00224         dbQueryExpression expr;
00225         expr = dbComponent(field,"stamp"),"<=",stamp;
00226         return expr;
00227     }
00228     friend dbQueryExpression between(char const* field, dbDateTime& from,
00229                                      dbDateTime& till)
00230     { 
00231         dbQueryExpression expr;
00232         expr=dbComponent(field,"stamp"),"between",from.stamp,"and",till.stamp;
00233         return expr;
00234     }
00235 
00236     static dbQueryExpression ascent(char const* field) { 
00237         dbQueryExpression expr;
00238         expr=dbComponent(field,"stamp");
00239         return expr;
00240     }   
00241     static dbQueryExpression descent(char const* field) { 
00242         dbQueryExpression expr;
00243         expr=dbComponent(field,"stamp"),"desc";
00244         return expr;
00245     }   
00246 };
00247 
00248 END_FASTDB_NAMESPACE
00249 
00250 #endif

Generated on Mon Oct 23 13:23:58 2006 for FastDB by doxygen1.2.18