在C ++中添加两个纪元毫秒

时间:2013-06-25 10:35:18

标签: c++ epoch

我的目标是确定一个项目的到期时间,以及获取(购买)的时间以及何时出售。每个项目都有一个TTL值。

我正在做以下事情:

time_t currentSellingTime;
long currentSystemTime = time(&currentSellingTime); // this gives me epoch millisec of now()

long TTL = <some_value>L;
long BuyingTime = <some_value> // this is also in epoch millsec


if(currentSystemTime >  TTL+BuyingTime))
{
//throw exception 
// item is expired
} 

我的问题是如何总结两个纪元毫秒并将其与C ++中的另一个纪元毫秒进行比较

2 个答案:

答案 0 :(得分:1)

time() works

可能存在一些误解
  1. time()给出的纪元时间以秒为单位,而不是毫秒
  2. time返回当前时间值,并可以选择将当前时间设置为给定的变量作为唯一参数。这意味着

    long currentSystemTime = time(&amp; currentSellingTime);

  3. 会将currentSystemTimecurrentSellingTime设置为当前时间,这可能不是您打算做的......您可能应该这样做

    long currentSystemTime = time(NULL);
    

    time(&currentSellingTime);
    

    但你使用的“双重形式”非常可疑。为了完整起见,MS Help reference for time()

答案 1 :(得分:0)

您想要使用另一个函数,如前所述,time()返回秒。尝试:

#include <time.h>


long current_time() {
    struct timespec t;
    clock_gettime(CLOCK_REALTIME, &t);

    return t.tv.sec * 1000l + t.tv_nsec / 1000000l;
}

您的代码应该可行。这种方法也与POSIX兼容。用法示例:

const long TTL = 100;
long start_time = current_time();

while (!(current_time() > start_time + TTL))
{
    // do the stuff that can expire
}

注意:我知道while循环中的条件可以以不同方式构造,但这样更像是“直到未过期”。