void CDate::SetToTime(const CTime& time, CDate::EPrecision prec) { switch (Which()) { case e_not_set: case e_Std: SetStd().SetToTime(time, prec); break; case e_Str: SetStr(time.AsString()); break; } }
static void s_TestMisc(int idx) { // AsString() {{ CTime t1; assert(t1.AsString() == ""); CTime t2(2000, 365 / 2); t2.SetFormat("M/D/Y h:m:s"); assert(t2.AsString() == "06/30/2000 00:00:00"); }} // Year 2000 problem {{ CTime t(1999, 12, 30); t.SetFormat("M/D/Y"); t.AddDay(); assert(t.AsString() == "12/31/1999"); t.AddDay(); assert(t.AsString() == "01/01/2000"); t.AddDay(); assert(t.AsString() == "01/02/2000"); t="02/27/2000"; t.AddDay(); assert(t.AsString() == "02/28/2000"); t.AddDay(); assert(t.AsString() == "02/29/2000"); t.AddDay(); assert(t.AsString() == "03/01/2000"); t.AddDay(); assert(t.AsString() == "03/02/2000"); }} // String assignment {{ CTime::SetFormat("M/D/Y h:m:s"); CTime t("02/15/2000 01:12:33"); assert(t.AsString() == "02/15/2000 01:12:33"); t = "3/16/2001 02:13:34"; assert(t.AsString() == "03/16/2001 02:13:34"); }} CTime::SetFormat("M/D/Y h:m:s.S"); // Adding Nanoseconds {{ CTime t; for (CTime ti(1999, 12, 31, 23, 59, 59, 999999995); ti <= CTime(2000, 1, 1, 0, 0, 0, 000000003); t = ti, ti.AddNanoSecond(2)) { } assert(t.AsString() == "01/01/2000 00:00:00.000000003"); }} CTime::SetFormat("M/D/Y h:m:s"); // Adding seconds {{ CTime t; for (CTime ti(1999, 12, 31, 23, 59, 5); ti <= CTime(2000, 1, 1, 0, 1, 20); t = ti, ti.AddSecond(11)) { } assert(t.AsString() == "01/01/2000 00:01:17"); }} // Adding minutes {{ CTime t; for (CTime ti(1999, 12, 31, 23, 45); ti <= CTime(2000, 1, 1, 0, 15); t = ti, ti.AddMinute(11)) { } assert(t.AsString() == "01/01/2000 00:07:00"); }} // Adding hours {{ CTime t; for (CTime ti(1999, 12, 31); ti <= CTime(2000, 1, 1, 15); t = ti, ti.AddHour(11)) { } assert(t.AsString() == "01/01/2000 09:00:00"); }} // Adding months {{ CTime t; for (CTime ti(1998, 12, 29); ti <= CTime(1999, 4, 1); t = ti, ti.AddMonth()) { } assert(t.AsString() == "03/28/1999 00:00:00"); }} // Difference {{ CTime t1(2000, 10, 1, 12, 3, 45,1); CTime t2(2000, 10, 2, 14, 55, 1,2); assert((t2.DiffDay(t1)-1.12) < 0.01); assert((t2.DiffHour(t1)-26.85) < 0.01); assert((t2.DiffMinute(t1)-1611.27) < 0.01); assert(t2.DiffSecond(t1) == 96676); }} // Database time formats {{ CTime t(2000, 1, 1, 1, 1, 1, 10000000); CTime::SetFormat("M/D/Y h:m:s.S"); TDBTimeI dbi = t.GetTimeDBI(); CTime::SetFormat("M/D/Y h:m:s"); dbi.days = 37093; dbi.time = 12301381; t.SetTimeDBI(dbi); assert(t.AsString() == "07/23/2001 11:23:24"); }} }
static void s_TestGMT(int idx) { // Write time in timezone format {{ CTime::SetFormat("M/D/Y h:m:s Z"); CTime t1(2001, 3, 12, 11, 22, 33, 999, CTime::eGmt); assert(t1.AsString() == "03/12/2001 11:22:33 GMT"); CTime t2(2001, 3, 12, 11, 22, 33, 999, CTime::eLocal); assert(t2.AsString() == "03/12/2001 11:22:33 "); }} // Process timezone string {{ CTime t; t.SetFormat("M/D/Y h:m:s Z"); t="03/12/2001 11:22:33 GMT"; assert(t.AsString() == "03/12/2001 11:22:33 GMT"); t="03/12/2001 11:22:33 "; assert(t.AsString() == "03/12/2001 11:22:33 "); }} // Day of week {{ CTime t(2001, 4, 1); t.SetFormat("M/D/Y h:m:s w"); int i; for (i=0; t<=CTime(2001, 4, 10); t.AddDay(),i++) { assert(t.DayOfWeek() == (i%7)); } }} // Test GetTimeT {{ time_t timer = time(0); CTime tgmt(CTime::eCurrent, CTime::eGmt, CTime::eTZPrecisionDefault); CTime tloc(CTime::eCurrent, CTime::eLocal, CTime::eTZPrecisionDefault); CTime t(timer); // Set the same time to all time objects tgmt.SetTimeT(timer); tloc.SetTimeT(timer); assert(timer == t.GetTimeT()); assert(timer == tgmt.GetTimeT()); // On the day of changing to summer/winter time, the local time // converted to GMT may differ from the value returned by time(0), // because in the common case API don't know if DST is in effect for // specified local time or not (see mktime()). time_t l_ = tloc.GetTimeT(); if (timer != l_ ) { if ( abs((int)(timer - l_)) > 3600 ) assert(timer == l_); } }} // Test TimeZoneOffset (1) -- EST timezone only {{ CTime tw(2001, 1, 1, 12); CTime ts(2001, 6, 1, 12); assert(tw.TimeZoneOffset() / 3600 == -5); assert(ts.TimeZoneOffset()/3600 == -4); }} // Test TimeZoneOffset (2) -- EST timezone only {{ CTime tw(2001, 6, 1, 12); CTime ts(2002, 1, 1, 12); assert(tw.TimeZoneOffset() / 3600 == -4); assert(ts.TimeZoneOffset() / 3600 == -5); }} // Test AdjustTime {{ CTime::SetFormat("M/D/Y h:m:s"); CTime t("03/11/2007 01:01:00"); CTime tn; t.SetTimeZonePrecision(CTime::eTZPrecisionDefault); // GMT t.SetTimeZone(CTime::eGmt); tn = t; tn.AddDay(5); assert(tn.AsString() == "03/16/2007 01:01:00"); tn = t; tn.AddDay(40); assert(tn.AsString() == "04/20/2007 01:01:00"); // Local eNone t.SetTimeZone(CTime::eLocal); t.SetTimeZonePrecision(CTime::eNone); tn = t; tn.AddDay(5); assert(tn.AsString() == "03/16/2007 01:01:00"); tn = t; tn.AddDay(40); assert(tn.AsString() == "04/20/2007 01:01:00"); //Local eMonth t.SetTimeZonePrecision(CTime::eMonth); tn = t; tn.AddDay(5); assert(tn.AsString() == "03/16/2007 01:01:00"); tn = t; tn.AddMonth(-1); assert(tn.AsString() == "02/11/2007 01:01:00"); tn = t; tn.AddMonth(+1); assert(tn.AsString() == "04/11/2007 02:01:00"); // Local eDay t.SetTimeZonePrecision(CTime::eDay); tn = t; tn.AddDay(-1); assert(tn.AsString() == "03/10/2007 01:01:00"); tn.AddDay(); assert(tn.AsString() == "03/11/2007 01:01:00"); tn = t; tn.AddDay(); assert(tn.AsString() == "03/12/2007 02:01:00"); // Local eHour t.SetTimeZonePrecision(CTime::eHour); tn = t; tn.AddHour(-3); CTime te = t; te.AddHour(3); assert(tn.AsString() == "03/10/2007 22:01:00"); assert(te.AsString() == "03/11/2007 05:01:00"); CTime th = tn; th.AddHour(49); assert(th.AsString() == "03/13/2007 00:01:00"); tn = "11/04/2007 00:01:00"; tn.SetTimeZonePrecision(CTime::eHour); te = tn; tn.AddHour(-3); te.AddHour(9); assert(tn.AsString() == "11/03/2007 21:01:00"); assert(te.AsString() == "11/04/2007 08:01:00"); th = tn; th.AddHour(49); assert(th.AsString() == "11/05/2007 21:01:00"); tn = "11/04/2007 09:01:00"; tn.SetTimeZonePrecision(CTime::eHour); te = tn; tn.AddHour(-10); te.AddHour(+10); assert(tn.AsString() == "11/04/2007 00:01:00"); assert(te.AsString() == "11/04/2007 19:01:00"); }} }