23 #include <sys/utime.h>    27 #include <sys/select.h>    36 #include <sys/types.h>    53     double sec_frac = T - floor(T);
    56     const auto tt = time_t(T);
    58     struct tm* parts = localTime ? localtime(&tt) : gmtime(&tt);
    61     p.
year = parts->tm_year + 1900;
    62     p.
month = parts->tm_mon + 1;
    63     p.
day = parts->tm_mday;
    66     p.
hour = parts->tm_hour;
    68     p.
second = parts->tm_sec + sec_frac;
    80     parts.tm_year = p.
year - 1900;
    81     parts.tm_mon = p.
month - 1;
    82     parts.tm_mday = p.
day;
    85     parts.tm_hour = p.
hour;
    87     parts.tm_sec = int(p.
second);
    89     double sec_frac = p.
second - parts.tm_sec;
   105     parts.tm_year = p.
year - 1900;
   106     parts.tm_mon = p.
month - 1;
   107     parts.tm_mday = p.
day;
   110     parts.tm_hour = p.
hour;
   112     parts.tm_sec = int(p.
second);
   114     double sec_frac = p.
second - parts.tm_sec;
   116     time_t tt = mktime(&parts);
   126     double timeSeconds = (t < 0) ? (-t) : t;
   129     const auto nDays = 
static_cast<unsigned int>(timeSeconds / (3600 * 24));
   130     timeSeconds -= nDays * 3600 * 24;
   131     const auto nHours = 
static_cast<unsigned int>(timeSeconds / 3600);
   132     timeSeconds -= nHours * 3600;
   133     const auto nMins = 
static_cast<unsigned int>(timeSeconds / 60);
   134     const auto nSecs = 
static_cast<unsigned int>(timeSeconds) % 60;
   136         static_cast<unsigned int>(1000 * timeSeconds - floor(timeSeconds));
   147     return static_cast<unsigned int>(
   148         1e6 * 
static_cast<double>(tmp % 10000000) / 1e7);
   159         (t.time_since_epoch().count() - ((uint64_t)116444736 * 1000000000));
   160     time_t auxTime = tmp / (uint64_t)10000000;
   162     tm* ptm = gmtime(&auxTime);
   164     if (!ptm) 
return std::string(
"(Malformed timestamp)");
   167         "%u/%02u/%02u,%02u:%02u:%02u.%06u", 1900 + ptm->tm_year,
   168         ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min,
   169         (
unsigned int)ptm->tm_sec, secFractions);
   181         (t.time_since_epoch().count() - ((uint64_t)116444736 * 1000000000));
   182     time_t auxTime = tmp / (uint64_t)10000000;
   184     tm* ptm = localtime(&auxTime);
   186     if (!ptm) 
return "(Malformed timestamp)";
   189         "%u/%02u/%02u,%02u:%02u:%02u.%06u", 1900 + ptm->tm_year,
   190         ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min,
   191         (
unsigned int)ptm->tm_sec, secFractions);
   203     auto t = tt.time_since_epoch().count();
   206     FileTimeToSystemTime((FILETIME*)&t, &sysT);
   207     return sysT.wHour * 3600.0 + sysT.wMinute * 60.0 + sysT.wSecond +
   208            sysT.wMilliseconds * 0.001;
   211         (t - ((uint64_t)116444736 * 1000000000)) / (uint64_t)10000000;
   212     tm* ptm = gmtime(&auxTime);
   214     return ptm->tm_hour * 3600.0 + ptm->tm_min * 60.0 + ptm->tm_sec;
   226     auto t = tt.time_since_epoch().count();
   228     uint64_t tmp = (t - ((uint64_t)116444736 * 1000000000));
   229     const time_t auxTime = tmp / (uint64_t)10000000;
   230     const tm* ptm = localtime(&auxTime);
   233     const unsigned int user_secondFractionDigits = secondFractionDigits;
   234     while (secondFractionDigits++ < 6) secFractions = secFractions / 10;
   237         "%02u:%02u:%02u.%0*u", ptm->tm_hour, ptm->tm_min,
   238         (
unsigned int)ptm->tm_sec, user_secondFractionDigits, secFractions);
   247     auto t = tt.time_since_epoch().count();
   249     uint64_t tmp = (t - ((uint64_t)116444736 * 1000000000));
   250     time_t auxTime = tmp / (uint64_t)10000000;
   252     tm* ptm = gmtime(&auxTime);
   253     if (!ptm) 
return string(
"(Malformed timestamp)");
   256         "%02u:%02u:%02u.%06u", ptm->tm_hour, ptm->tm_min,
   257         (
unsigned int)ptm->tm_sec, secFractions);
   266     auto t = tt.time_since_epoch().count();
   268     uint64_t tmp = (t - ((uint64_t)116444736 * 1000000000));
   269     time_t auxTime = tmp / (uint64_t)10000000;
   270     tm* ptm = gmtime(&auxTime);
   271     if (!ptm) 
return string(
"(Malformed timestamp)");
   274         "%u/%02u/%02u", 1900 + ptm->tm_year, ptm->tm_mon + 1, ptm->tm_mday);
   285     if (seconds >= 365 * 24 * 3600)
   286         return format(
"%.2f years", seconds / (365 * 24 * 3600));
   287     else if (seconds >= 24 * 3600)
   288         return format(
"%.2f days", seconds / (24 * 3600));
   289     else if (seconds >= 3600)
   290         return format(
"%.2f hours", seconds / 3600);
   291     else if (seconds >= 60)
   292         return format(
"%.2f minutes", seconds / 60);
   293     else if (seconds >= 1)
   294         return format(
"%.2f sec", seconds);
   295     else if (seconds >= 1e-3)
   296         return format(
"%.2f ms", seconds * 1e3);
   297     else if (seconds >= 1e-6)
   298         return format(
"%.2f us", seconds * 1e6);
   300         return format(
"%.2f ns", seconds * 1e9);
   305     const uint64_t v = t.time_since_epoch().count();
 void timestampToParts(TTimeStamp t, TTimeParts &p, bool localTime=false)
Gets the individual parts of a date/time (days, hours, minutes, seconds) - UTC time or local time...
 
std::ostream & operator<<(std::ostream &o, const TTimeStamp &t)
Textual representation of a TTimeStamp as the plain number in time_since_epoch().count() ...
 
std::string std::string format(std::string_view fmt, ARGS &&... args)
 
time_t timegm(struct tm *tm)
An OS-independent version of timegm (which is not present in all compilers): converts a time structur...
 
mrpt::system::TTimeStamp buildTimestampFromParts(const mrpt::system::TTimeParts &p)
Builds a timestamp from the parts (Parts are in UTC) 
 
uint8_t day_of_week
Seconds (0.0000-59.9999) 
 
double extractDayTimeFromTimestamp(const mrpt::system::TTimeStamp t)
Returns the number of seconds ellapsed from midnight in the given timestamp. 
 
std::string timeToString(const mrpt::system::TTimeStamp t)
Convert a timestamp into this textual form (UTC): HH:MM:SS.MMMMMM. 
 
std::string formatTimeInterval(const double timeSeconds)
Returns a formated string with the given time difference (passed as the number of seconds)...
 
#define ASSERT_(f)
Defines an assertion mechanism. 
 
mrpt::Clock::time_point TTimeStamp
A system independent time type, it holds the the number of 100-nanosecond intervals since January 1...
 
int daylight_saving
Day of week (1:Sunday, 7:Saturday) 
 
std::string dateToString(const mrpt::system::TTimeStamp t)
Convert a timestamp into this textual form: YEAR/MONTH/DAY. 
 
The parts of a date/time (it's like the standard 'tm' but with fractions of seconds). 
 
double timestampTotime_t(const mrpt::system::TTimeStamp t) noexcept
Transform from TTimeStamp to standard "time_t" (actually a double number, it can contain fractions of...
 
std::string intervalFormat(const double seconds)
This function implements time interval formatting: Given a time in seconds, it will return a string d...
 
#define ASSERTMSG_(f, __ERROR_MSG)
Defines an assertion mechanism. 
 
double second
Minute (0-59) 
 
mrpt::system::TTimeStamp buildTimestampFromPartsLocalTime(const mrpt::system::TTimeParts &p)
Builds a timestamp from the parts (Parts are in local time) 
 
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries. 
 
uint8_t minute
Hour (0-23) 
 
std::string dateTimeToString(const mrpt::system::TTimeStamp t)
Convert a timestamp into this textual form (UTC time): YEAR/MONTH/DAY,HH:MM:SS.MMM. 
 
std::string timeLocalToString(const mrpt::system::TTimeStamp t, unsigned int secondFractionDigits=6)
Convert a timestamp into this textual form (in local time): HH:MM:SS.MMMMMM. 
 
static unsigned int calcSecFractions(const uint64_t tmp)
 
std::string dateTimeLocalToString(const mrpt::system::TTimeStamp t)
Convert a timestamp into this textual form (in local time): YEAR/MONTH/DAY,HH:MM:SS.MMM. 
 
mrpt::system::TTimeStamp time_tToTimestamp(const double t)
Transform from standard "time_t" (actually a double number, it can contain fractions of seconds) to T...
 
#define INVALID_TIMESTAMP
Represents an invalid timestamp, where applicable.