Main Page   Class Hierarchy   Compound List   File List   Compound Members  

datetime.h

00001 //-< DATEIME.H >-----------------------------------------------------*--------*
00002 // GigaBASE                  Version 1.0         (c) 1999  GARRET    *     ?  *
00003 // (Post Relational 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_GIGABASE_NAMESPACE
00018 
00019 
00023 class GIGABASE_DLL_ENTRY dbDateTime {
00024     int4 stamp;
00025   public:
00026     bool operator == (dbDateTime const& dt) const {
00027         return stamp == dt.stamp;
00028     }
00029     bool operator != (dbDateTime const& dt) const {
00030         return stamp != dt.stamp;
00031     }
00032     bool operator > (dbDateTime const& dt) const {
00033         return stamp > dt.stamp;
00034     }
00035     bool operator >= (dbDateTime const& dt) const {
00036         return stamp >= dt.stamp;
00037     }
00038     bool operator < (dbDateTime const& dt) const {
00039         return stamp < dt.stamp;
00040     }
00041     bool operator <= (dbDateTime const& dt) const {
00042         return stamp <= dt.stamp;
00043     }
00044     int operator - (dbDateTime const& dt) const {
00045         return stamp - dt.stamp;
00046     }
00047     int operator + (dbDateTime const& dt) const {
00048         return stamp + dt.stamp;
00049     }
00050 
00054     static dbDateTime current() {
00055         return dbDateTime(time(NULL));
00056     }
00057     
00061     dbDateTime(time_t t) {
00062         stamp = (int4)t;
00063     }
00064     
00068     dbDateTime() {
00069         stamp = -1;
00070     }
00071     
00075     bool isValid() const {
00076         return stamp != -1;
00077     }
00078 
00082     time_t asTime_t() const { return stamp; }
00083 
00087     void clear() { stamp = -1; }
00088 
00098     dbDateTime(int year, int month, int day,
00099                int hour=0, int min=0, int sec = 0)
00100     {
00101         struct tm t;
00102         t.tm_year = year > 1900 ? year - 1900 : year;
00103         t.tm_mon = month-1;
00104         t.tm_mday = day;
00105         t.tm_hour = hour;
00106         t.tm_min = min;
00107         t.tm_sec = sec;
00108         t.tm_isdst = -1;
00109         stamp = (int4)mktime(&t);
00110     }
00111     
00115     dbDateTime(int hour, int min) {
00116         stamp = (hour*60+min)*60;
00117     }
00118 
00119 #if defined(HAVE_LOCALTIME_R) && !defined(NO_PTHREADS)
00120 
00123     int year() {
00124         struct tm t;
00125         time_t tt = (nat4)stamp;
00126         return localtime_r(&tt, &t)->tm_year + 1900;
00127     }
00131     int month() { // 1..12
00132         struct tm t;
00133         time_t tt = (nat4)stamp;
00134         return localtime_r(&tt, &t)->tm_mon + 1;
00135     }
00139     int day() { // 1..31
00140         struct tm t;
00141         time_t tt = (nat4)stamp;
00142         return localtime_r(&tt, &t)->tm_mday;
00143     }
00147     int dayOfYear() { // 1..366
00148         struct tm t;
00149         time_t tt = (nat4)stamp;
00150         return localtime_r(&tt, &t)->tm_yday+1;
00151     }
00155     int dayOfWeek() { // 1..7
00156         struct tm t;
00157         time_t tt = (nat4)stamp;
00158         return localtime_r(&tt, &t)->tm_wday+1;
00159     }
00163     int hour() { // 0..24
00164         struct tm t;
00165         time_t tt = (nat4)stamp;
00166         return localtime_r(&tt, &t)->tm_hour;
00167     }
00171     int minute() { // 0..59
00172         struct tm t;
00173         time_t tt = (nat4)stamp;
00174         return localtime_r(&tt, &t)->tm_min;
00175     }
00179     int second() { // 0..59
00180         struct tm t;
00181         time_t tt = (nat4)stamp;
00182         return localtime_r(&tt, &t)->tm_sec;
00183     }
00191     char_t* asString(char* buf, int buf_size, char_t const* format = "%c") const {
00192         struct tm t;
00193         time_t tt = (nat4)stamp;
00194         strftime(buf, buf_size, format, localtime_r(&tt, &t));
00195         return buf;
00196     }
00200     static dbDateTime currentDate() {
00201         struct tm t;
00202         time_t curr = time(NULL);
00203         localtime_r(&curr, &t);;
00204         t.tm_hour = 0;
00205         t.tm_min = 0;
00206         t.tm_sec = 0;
00207         return dbDateTime(mktime(&t));
00208     }
00209 #else
00210 
00213     int year() {
00214         time_t tt = (nat4)stamp;
00215         return localtime(&tt)->tm_year + 1900;
00216     }
00220     int month() { // 1..12
00221         time_t tt = (nat4)stamp;
00222         return localtime(&tt)->tm_mon + 1;
00223     }
00227     int day() { // 1..31
00228         time_t tt = (nat4)stamp;
00229         return localtime(&tt)->tm_mday;
00230     }
00234     int dayOfYear() { // 1..366
00235         time_t tt = (nat4)stamp;
00236         return localtime(&tt)->tm_yday+1;
00237     }
00241     int dayOfWeek() { // 1..7
00242         time_t tt = (nat4)stamp;
00243         return localtime(&tt)->tm_wday+1;
00244     }
00248     int hour() { // 0..24
00249         time_t tt = (nat4)stamp;
00250         return localtime(&tt)->tm_hour;
00251     }
00255     int minute() { // 0..59
00256         time_t tt = (nat4)stamp;
00257         return localtime(&tt)->tm_min;
00258     }
00262     int second() { // 0..59
00263         time_t tt = (nat4)stamp;
00264         return localtime(&tt)->tm_sec;
00265     }
00273     char_t* asString(char_t* buf, int buf_size, char_t const* format = _T("%c")) const {
00274         time_t tt = (nat4)stamp;
00275 #ifdef _WINCE
00276         struct tm* t = localtime(&tt);
00277         wchar_t cnvBuf[256];
00278         wsprintf(cnvBuf, _T("%02d/02d/%40d %02d:%02d:%02d"), t->tm_mon, t->tm_yday+1, t->tm_year + 1900,
00279                         t->tm_hour, t->tm_min, t->tm_sec);
00280         wsprintf(buf, _T("%.*s"), buf_size, cnvBuf);
00281 #else
00282         STRFTIME(buf, buf_size, format, localtime(&tt));
00283 #endif
00284         return buf;
00285     }
00289     static dbDateTime currentDate() {
00290         time_t curr = time(NULL);
00291         struct tm* tp = localtime(&curr);;
00292         tp->tm_hour = 0;
00293         tp->tm_min = 0;
00294         tp->tm_sec = 0;
00295         return dbDateTime(mktime(tp));
00296     }
00297 #endif
00298 
00299     CLASS_DESCRIPTOR(dbDateTime,
00300                      (KEY(stamp,INDEXED|HASHED),
00301                       METHOD(year), METHOD(month), METHOD(day),
00302                       METHOD(dayOfYear), METHOD(dayOfWeek),
00303                       METHOD(hour), METHOD(minute), METHOD(second)));
00304 
00310     dbQueryExpression operator == (char_t const* field) {
00311         dbQueryExpression expr;
00312         expr = dbComponent(field,_T("stamp")),_T("="),stamp;
00313         return expr;
00314     }
00320     dbQueryExpression operator != (char_t const* field) {
00321         dbQueryExpression expr;
00322         expr = dbComponent(field,_T("stamp")),_T("<>"),stamp;
00323         return expr;
00324     }
00330     dbQueryExpression operator < (char_t const* field) {
00331         dbQueryExpression expr;
00332         expr = dbComponent(field,_T("stamp")),_T(">"),stamp;
00333         return expr;
00334     }
00340     dbQueryExpression operator <= (char_t const* field) {
00341         dbQueryExpression expr;
00342         expr = dbComponent(field,_T("stamp")),_T(">="),stamp;
00343         return expr;
00344     }
00350     dbQueryExpression operator > (char_t const* field) {
00351         dbQueryExpression expr;
00352         expr = dbComponent(field,_T("stamp")),_T("<"),stamp;
00353         return expr;
00354     }
00360     dbQueryExpression operator >= (char_t const* field) {
00361         dbQueryExpression expr;
00362         expr = dbComponent(field,_T("stamp")),_T("<="),stamp;
00363         return expr;
00364     }
00372     friend dbQueryExpression between(char_t const* field, dbDateTime& from,
00373                                      dbDateTime& till)
00374     {
00375         dbQueryExpression expr;
00376         expr=dbComponent(field,_T("stamp")),_T("between"),from.stamp,_T("and"),till.stamp;
00377         return expr;
00378     }
00379 
00384     static dbQueryExpression ascent(char_t const* field) {
00385         dbQueryExpression expr;
00386         expr=dbComponent(field,_T("stamp"));
00387         return expr;
00388     }
00393     static dbQueryExpression descent(char_t const* field) {
00394         dbQueryExpression expr;
00395         expr=dbComponent(field,_T("stamp")),_T("desc");
00396         return expr;
00397     }
00398 };
00399 
00400 END_GIGABASE_NAMESPACE
00401 
00402 #endif
00403 
00404 
00405 
00406 
00407 
00408 
00409 

Generated on Thu Aug 23 19:35:52 2007 for GigaBASE by doxygen1.2.18