I'm doing a lot of calculations with times, building time objects relative to other time objects by adding seconds. The code is supposed to run on embedded devices and servers. Most documentations say about time_t
that it's some arithmetic type, storing usually the time since the epoch. How safe is it to assume that time_t
store a number of seconds since something? If we can assume that, then we can just use addition and subtraction rather than localtime
, mktime
and difftime
.
So far I've solved the problem by using a constexpr bool time_tUsesSeconds
, denoting whether it is safe to assume that time_t
uses seconds. If it's non-portable to assume time_t
is in seconds, is there a way to initialize that constant automatically?
time_t timeByAddingSeconds(time_t theTime, int timeIntervalSeconds) {
if (Time_tUsesSeconds){
return theTime + timeIntervalSeconds;
} else {
tm timeComponents = *localtime(&theTime);
timeComponents.tm_sec += timeIntervalSeconds;
return mktime(&timeComponents);
}
}