static void TestTimeArithmetics(void) { using vislib::sys::DateTime; using vislib::sys::DateTimeSpan; DateTime dateTime; dateTime.Set(1, 1, 1, 0, 0, 0); dateTime += DateTimeSpan::OneMillisecond(); ::AssertEqual("Add 1 ms", dateTime, DateTime(1, 1, 1, 0, 0, 0, 1)); dateTime.Set(1, 1, 1, 0, 0, 0, 1); dateTime += DateTimeSpan::OneMillisecond(false); ::AssertEqual("Add -1 ms", dateTime, DateTime(1, 1, 1, 0, 0, 0, 0)); dateTime.Set(1, 1, 1, 0, 0, 0, 1); dateTime -= DateTimeSpan::OneMillisecond(); ::AssertEqual("Subtract 1 ms", dateTime, DateTime(1, 1, 1, 0, 0, 0, 0)); dateTime.Set(1, 1, 1, 0, 0, 0); dateTime -= DateTimeSpan::OneMillisecond(false); ::AssertEqual("Subtract -1 ms", dateTime, DateTime(1, 1, 1, 0, 0, 0, 1)); }
DateTime DateTime::FromUnixTimeStamp(int64 unixts, int nsec) { int msec = nsec / 1000000; // 0 == 1970-01-01 int64 chuts = unixts; chuts *= 1000; chuts += msec; DateTime date; date.Set(1970); date.m_stamp += chuts; date.UpdateFieldsFromStamp(); return date; }
int64 DateTime::ToUnixTimeStamp(int* pnsec) const { DateTime dateBase; dateBase.Set(1970); int64 dif = m_stamp - dateBase.m_stamp; if( pnsec ) { *pnsec = (dif % 1000) * 1000000; } dif /= 1000; if( dif < 0 ) dif = 0; return dif; }