我想通过查看数据的时间戳来查看我的数据是否为120秒,所以我有以下代码:
uint64_t now = duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
bool is_old = (120 * 1000 < (now - data_holder->getTimestamp()));
在上面的代码中,
data_holder->getTimestamp()
是uint64_t
,它返回以毫秒为单位的时间戳。我上面的代码看起来正确吗? 最佳答案
我可能会做这样的事情:
auto now = system_clock::now().time_since_epoch();
// Use the correct time duration below. Milliseconds could be wrong, see 1)
auto diff = now - std::chrono::milliseconds(data_holder->getTimestamp());
bool is_old = diff > std::chrono::seconds{120};
// bool is_old = diff > 120s; // From C++14 onwards.
1)如前所述,
milliseconds
可能是用于getTimestamp()
的错误单位。所有可能的类型是std::chrono::hours
std::chrono::minutes
std::chrono::seconds
std::chrono::milliseconds
std::chrono::microseconds
std::chrono::nanoseconds
您可能必须尝试使用哪个,因为这取决于
data_holder->getTimestamp()
。注:大一号
确保使用
system_clock
来测量时间,因为纪元最有可能起作用。但是标准不要求时钟的纪元是UNIXt纪元的。您已经用steady_clock
遇到了这个问题。您必须自己计算时钟纪元与纪元之间的差(而且我不知道现在对任何时钟都这样做)。对于
system_clock
,如果您不信任它使用unix纪元,则可以使用以下命令:system_clock::duration time_since_unix_epoch()
{
std::tm epoch;
epoch.tm_mday = 1;
epoch.tm_mon = 0;
epoch.tm_year = 70;
std::time_t epocht = mktime(&epoch);
return system_clock::now() - system_clock::from_time_t(epocht);
}
而不是
system_clock::now()
。我更喜欢这种方法。不幸的是,您不能仅用
system_clock
中的另一个时钟替换std::chrono
,因为只有std::system_clock
提供了from_time_t(time_t)
,它可以将实际日期转换为时钟使用的内部time_point
。关于c++ - 在C++中验证特定持续时间的时间戳,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31550878/