gpt4 book ai didi

c++ - 在 C++ 中验证特定持续时间的时间戳

转载 作者:行者123 更新时间:2023-11-30 03:50:53 26 4
gpt4 key购买 nike

我想通过查看数据的时间戳来查看我的数据是否存在 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) 如前所述,毫秒 可能是用于getTimestamp() 的错误单位。所有可能的类型都是

std::chrono::hours
std::chrono::minutes
std::chrono::seconds
std::chrono::milliseconds
std::chrono::microseconds
std::chrono::nanoseconds

您可能必须尝试使用​​哪一个,因为这取决于 data_holder->getTimestamp()


注:大一

确保使用 system_clock 来测量时间,因为 epoch 最有可能工作。但该标准并不要求时钟的纪元是UNIX 纪元。您已经在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com