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 <time.h>
00015 #include "stdtp.h"
00016 #include "class.h"
00017 
00018 #if !defined(NO_PTHREADS) && !defined(_WIN32)
00019 #define USE_REENTRANT_LIBRARY
00020 #endif
00021 
00022 class FASTDB_DLL_ENTRY dbDateTime { 
00023     int4 stamp;
00024   public:
00025     bool operator == (dbDateTime const& dt) { 
00026         return stamp == dt.stamp;
00027     }
00028     bool operator != (dbDateTime const& dt) { 
00029         return stamp != dt.stamp;
00030     }
00031     bool operator > (dbDateTime const& dt) { 
00032         return stamp > dt.stamp;
00033     }
00034     bool operator >= (dbDateTime const& dt) { 
00035         return stamp >= dt.stamp;
00036     }
00037     bool operator < (dbDateTime const& dt) { 
00038         return stamp < dt.stamp;
00039     }
00040     bool operator <= (dbDateTime const& dt) { 
00041         return stamp <= dt.stamp;
00042     }
00043     int operator - (dbDateTime const& dt) { 
00044         return stamp - dt.stamp;
00045     }
00046      int operator + (dbDateTime const& dt) { 
00047         return stamp + dt.stamp;
00048     }
00049     static dbDateTime current() { 
00050         return dbDateTime(time(NULL));
00051     }
00052     dbDateTime(time_t tm) {
00053         stamp = tm;
00054     }
00055     dbDateTime() { 
00056         stamp = -1;
00057     } 
00058     bool isValid() const { 
00059         return stamp != -1;
00060     }
00061 
00062     time_t asTime_t() { return stamp; }
00063 
00064     void clear() { stamp = -1; }
00065 
00066     dbDateTime(int year, int month, int day, 
00067                int hour=0, int min=0, int sec = 0) 
00068     { 
00069         struct tm t;
00070         t.tm_year = year > 1900 ? year - 1900 : year;
00071         t.tm_mon = month-1;
00072         t.tm_mday = day;
00073         t.tm_hour = hour;
00074         t.tm_min = min;
00075         t.tm_sec = sec;
00076         t.tm_isdst = -1;
00077         stamp = mktime(&t);
00078     }
00079     dbDateTime(int hour, int min) { 
00080         stamp = (hour*60+min)*60;
00081     }
00082 
00083 #ifdef USE_REENTRANT_LIBRARY
00084     int year() { 
00085         struct tm t;
00086         return localtime_r((time_t*)&stamp, &t)->tm_year + 1900;
00087     }
00088     int month() { // 1..12
00089         struct tm t;
00090         return localtime_r((time_t*)&stamp, &t)->tm_mon + 1;
00091     }
00092     int day() { // 1..31
00093         struct tm t;
00094         return localtime_r((time_t*)&stamp, &t)->tm_mday;
00095     }
00096     int dayOfYear() { // 1..366
00097         struct tm t;
00098         return localtime_r((time_t*)&stamp, &t)->tm_yday+1;
00099     }
00100     int dayOfWeek() { // 1..7
00101         struct tm t;
00102         return localtime_r((time_t*)&stamp, &t)->tm_wday+1;
00103     }
00104     int hour() { // 0..24
00105         struct tm t;
00106         return localtime_r((time_t*)&stamp, &t)->tm_hour;
00107     }
00108     int minute() { // 0..59
00109         struct tm t;
00110         return localtime_r((time_t*)&stamp, &t)->tm_min;
00111     }
00112     int second() { // 0..59
00113         struct tm t;
00114         return localtime_r((time_t*)&stamp, &t)->tm_sec;
00115     }
00116     char* asString(char* buf, int buf_size, char const* format = "%c") const { 
00117         struct tm t;
00118         strftime(buf, buf_size, format, localtime_r((time_t*)&stamp, &t));
00119         return buf;
00120     }
00121     static dbDateTime currentDate() { 
00122         struct tm t;
00123         time_t curr = time(NULL);
00124         localtime_r(&curr, &t);;
00125         t.tm_hour = 0;
00126         t.tm_min = 0;
00127         t.tm_sec = 0;
00128         return dbDateTime(mktime(&t));
00129     }
00130 #else
00131     int year() { 
00132         return localtime((time_t*)&stamp)->tm_year + 1900;
00133     }
00134     int month() { // 1..12
00135         return localtime((time_t*)&stamp)->tm_mon + 1;
00136     }
00137     int day() { // 1..31
00138         return localtime((time_t*)&stamp)->tm_mday;
00139     }
00140     int dayOfYear() { // 1..366
00141         return localtime((time_t*)&stamp)->tm_yday+1;
00142     }
00143     int dayOfWeek() { // 1..7
00144         return localtime((time_t*)&stamp)->tm_wday+1;
00145     }
00146     int hour() { // 0..24
00147         return localtime((time_t*)&stamp)->tm_hour;
00148     }
00149     int minute() { // 0..59
00150         return localtime((time_t*)&stamp)->tm_min;
00151     }
00152     int second() { // 0..59
00153         return localtime((time_t*)&stamp)->tm_sec;
00154     }
00155     char* asString(char* buf, int buf_size, char const* format = "%c") const { 
00156         strftime(buf, buf_size, format, localtime((time_t*)&stamp));
00157         return buf;
00158     }
00159     static dbDateTime currentDate() { 
00160         time_t curr = time(NULL);
00161         struct tm* tp = localtime(&curr);;
00162         tp->tm_hour = 0;
00163         tp->tm_min = 0;
00164         tp->tm_sec = 0;
00165         return dbDateTime(mktime(tp));
00166     }
00167 #endif    
00168 
00169     CLASS_DESCRIPTOR(dbDateTime, 
00170                      (KEY(stamp,INDEXED|HASHED), 
00171                       METHOD(year), METHOD(month), METHOD(day),
00172                       METHOD(dayOfYear), METHOD(dayOfWeek),
00173                       METHOD(hour), METHOD(minute), METHOD(second)));
00174 
00175     dbQueryExpression operator == (char const* field) { 
00176         dbQueryExpression expr;
00177         expr = dbComponent(field,"stamp"),"=",stamp;
00178         return expr;
00179     }
00180     dbQueryExpression operator != (char const* field) { 
00181         dbQueryExpression expr;
00182         expr = dbComponent(field,"stamp"),"<>",stamp;
00183         return expr;
00184     }
00185     dbQueryExpression operator < (char const* field) { 
00186         dbQueryExpression expr;
00187         expr = dbComponent(field,"stamp"),">",stamp;
00188         return expr;
00189     }
00190     dbQueryExpression operator <= (char const* field) { 
00191         dbQueryExpression expr;
00192         expr = dbComponent(field,"stamp"),">=",stamp;
00193         return expr;
00194     }
00195     dbQueryExpression operator > (char const* field) { 
00196         dbQueryExpression expr;
00197         expr = dbComponent(field,"stamp"),"<",stamp;
00198         return expr;
00199     }
00200     dbQueryExpression operator >= (char const* field) { 
00201         dbQueryExpression expr;
00202         expr = dbComponent(field,"stamp"),"<=",stamp;
00203         return expr;
00204     }
00205     friend dbQueryExpression between(char const* field, dbDateTime& from,
00206                                      dbDateTime& till)
00207     { 
00208         dbQueryExpression expr;
00209         expr=dbComponent(field,"stamp"),"between",from.stamp,"and",till.stamp;
00210         return expr;
00211     }
00212 
00213     static dbQueryExpression ascent(char const* field) { 
00214         dbQueryExpression expr;
00215         expr=dbComponent(field,"stamp");
00216         return expr;
00217     }   
00218     static dbQueryExpression descent(char const* field) { 
00219         dbQueryExpression expr;
00220         expr=dbComponent(field,"stamp"),"desc";
00221         return expr;
00222     }   
00223 };
00224 
00225 #endif

Generated on Fri Nov 15 21:06:29 2002 for FastDB by doxygen1.2.15