Fl_Date_Time Fl_Date_Time::convert(const long tt) { struct tm *t = localtime((time_t*)&tt); double dat,tim; encode_date(dat,short(t->tm_year+1900),short(t->tm_mon+1),short(t->tm_mday)); encode_time(tim,short(t->tm_hour),short(t->tm_min),short(t->tm_sec),short(0)); return dat + tim; }
Fl_Date_Time::Fl_Date_Time (const char * dat) { int i; // NLS stuff for (i=0; i<7;i++) dayname[i]=_(dayname[i]); for (i=0; i<12;i++) mname[i]=_(mname[i]); Fl_String s1( Fl_String(dat).trim() ); Fl_String s2; if (!*dat) { m_dateTime = 0; return; } int p = s1.pos(" "); if (p >= 0) { s2 = s1.sub_str(p+1,20).trim(); s1[p] = 0; } if ( strchr(s1.c_str(),dateSeparator) ) { encode_date(m_dateTime, s1.c_str()); if ( strchr(s2.c_str(),timeSeparator) ) { double dt; encode_time(dt, s2.c_str()); m_dateTime += dt; } } else encode_time(m_dateTime, s1.c_str()); }
void Fl_Date_Time::encode_date(double &dt,const char *dat) { char bdat[64]; short datePart[7], partNumber = 0; char *ptr = NULL; int i; memset(datePart,0,sizeof(datePart)); upperCase(bdat, dat, sizeof(bdat)); if (strcmp(bdat,"TODAY") == 0) { dt = Date(); // Sets the current date return; } else { int len = strlen(bdat); for(i = 0; i <= len && partNumber < 7; i++) { char c = bdat[i]; if (c == dateSeparator || c == timeSeparator || c == ' ' || c == 0) { if (c == timeSeparator && partNumber < 3) partNumber = 3; if (ptr) { // end of token bdat[i] = 0; datePart[partNumber] = (short)atoi(ptr); partNumber++; ptr = NULL; } } else { if (!isdigit(c)) { dt = 0; return; } if (!ptr) ptr = bdat + i; } } if (partNumber < 3) { // Not enough date parts dt = 0; return; } short month=0, day=0, year=0; for(i = 0; i < 3; i++) switch (datePartsOrder[i]) { case 'M': month = datePart[i]; break; case 'D': day = datePart[i]; break; case 'Y': year = datePart[i]; break; } if (year < 100) { if (year < 35) year = short(year + 2000); else year = short(year + 1900); } double dd; encode_date(dd,year,month,day); if (partNumber > 3) { // Time part included into string double d; encode_time(d,datePart[3],datePart[4],datePart[5],datePart[6]); dd += d; } dt = dd; } }
ISC_TIMESTAMP TimeStamp::encode_timestamp(const struct tm* times, const int fractions) { fb_assert(fractions >= 0 && fractions < ISC_TIME_SECONDS_PRECISION); ISC_TIMESTAMP ts; ts.timestamp_date = encode_date(times); ts.timestamp_time = encode_time(times->tm_hour, times->tm_min, times->tm_sec, fractions); return ts; }
//---------------------------------------------------------------- // Constructors //---------------------------------------------------------------- Fl_Date_Time::Fl_Date_Time (short year,short month,short day,short hour,short minute,short second) { double t; int i; // NLS stuff for (i=0; i<7;i++) dayname[i]=_(dayname[i]); for (i=0; i<12;i++) mname[i]=_(mname[i]); encode_date(m_dateTime,year,month,day); encode_time(t,hour,minute,second); m_dateTime += t; }
void Fl_Date_Time::operator = (const char * dat) { encode_date(m_dateTime, dat); }