70 Set(year, month, day, hour, min, sec);
87 static TString weekDays[7] = {
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat",
"Sun" };
90 for (day = 0; day < 7; day++) {
91 if (wd(0, 3) == weekDays[day])
94 return (day < 7) ? day+1: -1;
104 char *retStr = ctime(&t);
109 static const char *defaulttime =
"15/06/96";
110 Error(
"TDatime::AsString",
"could not get time string");
124#if defined(R__SOLARIS) && (_POSIX_C_SOURCE - 0 < 199506L)
125 char *retStr = ctime_r(&t, out, 26);
127 char *retStr = ctime_r(&t, out);
130 char *retStr = ctime(&t);
139 static const char *defaulttime =
"15/06/96";
140 strcpy(out, defaulttime);
141 Error(
"TDatime::AsString",
"could not get time string");
153 static char sqldate[20];
162 snprintf(sqldate,20,
"%04d-%02d-%02d %02d:%02d:%02d", (year+1995), month, day,
191 tp.tm_year = year+95;
199 time_t t = mktime(&tp);
201 Error(
"TDatime::Convert",
"error converting fDatime to time_t");
207 struct tm *tgp = gmtime_r(&t, &tg);
209 struct tm *tgp = gmtime(&t);
252 return 10000*(year+1995) + 100*month + day;
263 return 10000*hour + 100*min + sec;
271 printf(
"Date/Time = %s\n",
AsString());
291 time_t tloc = time(
nullptr);
293 struct tm *tp = localtime_r(&tloc, &tpa);
294 UInt_t year = tp->tm_year;
295 UInt_t month = tp->tm_mon + 1;
297 UInt_t hour = tp->tm_hour;
303 UInt_t year = tp.wYear-1900;
311 fDatime = (year-95)<<26 | month<<22 | day<<17 | hour<<12 | min<<6 | sec;
322 UInt_t year, month, day, hour, min, sec;
325 year = ((tloc >> 25) & 0x7f) + 80;
326 month = ((tloc >> 21) & 0xf);
327 day = (tloc >> 16) & 0x1f;
328 hour = (tloc >> 11) & 0x1f;
329 min = (tloc >> 5) & 0x3f;
330 sec = (tloc & 0x1f) * 2;
332 time_t t = (time_t) tloc;
335 struct tm *tp = localtime_r(&t, &tpa);
337 struct tm *tp = localtime(&t);
340 month = tp->tm_mon + 1;
347 fDatime = (year-95)<<26 | month<<22 | day<<17 | hour<<12 | min<<6 | sec;
360 if (date > 19000000) date -= 19000000;
362 Error(
"TDatime::Set",
"year smaller than 1995");
366 Int_t year = date/10000;
367 Int_t month = (date-year*10000)/100;
368 Int_t day = date%100;
370 Int_t hour, min, sec;
373 min = (time-hour*10000)/100;
376 fDatime = (year-95)<<26 | month<<22 | day<<17 | hour<<12 | min<<6 | sec;
386 if (year < 159) year += 1900;
388 Error(
"TDatime::Set",
"year must be >= 1995");
392 fDatime = (year-1995)<<26 | month<<22 | day<<17 | hour<<12 | min<<6 | sec;
401 Int_t yy, mm, dd, hh, mi, ss;
403 if (sscanf(sqlDateTime,
"%d-%d-%d %d:%d:%d", &yy, &mm, &dd, &hh, &mi, &ss) == 6)
404 Set(yy, mm, dd, hh, mi, ss);
406 Error(
"TDatime(sqlDatTime)",
"input string not in right format, set"
407 " to current date/time");
432 UInt_t year = datetime>>26;
433 UInt_t month = (datetime<<6)>>28;
434 UInt_t day = (datetime<<10)>>27;
435 UInt_t hour = (datetime<<15)>>27;
436 UInt_t min = (datetime<<20)>>26;
437 UInt_t sec = (datetime<<26)>>26;
438 date = 10000*(year+1995) + 100*month + day;
439 time = 10000*hour + 100*min + sec;
451 Int_t dy = date / 10000;
452 Int_t dm = (date - dy*10000)/100;
453 Int_t dd = (date - dy*10000 - dm*100);
457 return y*365 +
y/4 -
y/100 +
y/400 + (
m*306 + 5)/10 + (dd - 1);
468 Int_t y =
int((10000*ld + 14780)/3652425);
469 Int_t ddd = day - (
y*365 +
y/4 -
y/100 +
y/400);
472 ddd = day - (
y*365 +
y/4 -
y/100 +
y/400);
474 Int_t mi = (52 + 100*ddd)/3060;
475 Int_t dy =
y + (mi + 2)/12;
476 Int_t dm = (mi + 2)%12 + 1;
477 Int_t dd = ddd - (mi*306 + 5)/10 + 1;
479 return dy*10000 + dm*100 + dd;
493 static Int_t calstart = 0;
498 ::Warning(
"TDatime::GetLegalGlobalDayFromDate",
"dates before Oct. 1582 are inaccurate.");
501 ::Error(
"TDatime::GetLegalGlobalDayFromDate",
"illegal date %d", dte);
510std::string cling::printValue(
const TDatime* val) {
512 return std::string(val->
AsString(buf));
void frombuf(char *&buf, Bool_t *x)
void tobuf(char *&buf, Bool_t x)
int Int_t
Signed integer 4 bytes (int).
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
bool Bool_t
Boolean (0=false, 1=true) (bool).
long long Long64_t
Portable signed long integer 8 bytes.
const char Option_t
Option string (const char).
Error("WriteTObject","The current directory (%s) is not associated with a file. The object (%s) has not been written.", GetName(), objname)
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
Buffer base class used for serializing objects.
This class stores the date and time with a precision of one second in an unsigned 32 bit word (950130...
static Int_t GetGlobalDayFromDate(Int_t date)
Static function that returns the global day number from date.
static Int_t GetDateFromGlobalDay(Int_t day)
Static function that returns the date from the global day number.
void Copy(TDatime &datime) const
Copy this to datime.
static Int_t GetLegalGlobalDayFromDate(Int_t date)
Static function that returns the global day number from date.
Int_t GetDate() const
Return date in form of 19971224 (i.e. 24/12/1997).
UInt_t Get() const
Return raw date/time as encoded by TDatime.
void FillBuffer(char *&buffer)
Encode Date/Time into buffer, used by I/O system.
Int_t GetDayOfWeek() const
Returns day of week, with Monday being day 1 and Sunday day 7.
void Print(Option_t *option="") const
Print date and time.
const char * AsSQLString() const
Return the date & time in SQL compatible string format, like: 1997-01-15 20:16:28.
virtual void Streamer(TBuffer &)
Stream a object of type TDatime.
TDatime()
Create a TDatime and set it to the current time.
void Set()
Set Date/Time to current time as reported by the system.
UInt_t Convert(Bool_t toGMT=kFALSE) const
Convert fDatime from TDatime format to the standard time_t format.
Int_t GetTime() const
Return time in form of 123623 (i.e. 12:36:23).
static void GetDateTime(UInt_t datetime, Int_t &date, Int_t &time)
Static function that returns the date and time.
const char * AsString() const
Return the date & time as a string (ctime() format).
void ReadBuffer(char *&buffer)
Decode Date/Time from output buffer, used by I/O system.