【发布时间】:2013-10-28 07:01:56
【问题描述】:
我正在对时间进行大量计算,通过添加秒来构建相对于其他时间对象的时间对象。该代码应该在嵌入式设备和服务器上运行。大多数文档都说time_t 是某种算术类型,通常存储自纪元以来的时间。假设time_t 存储了几秒钟之后有多安全?如果我们可以假设,那么我们可以只使用加法和减法而不是localtime、mktime 和difftime。
到目前为止,我已经通过使用constexpr bool time_tUsesSeconds 解决了这个问题,表示假设time_t 使用秒是否安全。如果假设 time_t 以秒为单位是不可移植的,有没有办法自动初始化该常量?
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);
}
}
【问题讨论】:
-
time_t的单位由设置它的函数决定,而不是由类型本身决定。因此,如果您使用的功能说它提供“秒”,那么您可以放心,这就是您所得到的。