首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在c++11中进行相对日间比较的最干净的方法

在c++11中进行相对日间比较的最干净的方法
EN

Stack Overflow用户
提问于 2014-08-03 16:05:52
回答 2查看 598关注 0票数 2

假设我有一个事件流,每个事件都有一个完整的时间戳,跨越许多天。我想把它们和一天中的时间进行比较,但不管一天是什么时候。例如,如果给定的事件发生在12:00到12:05:00之间,那么可以做一些事情,但不管是哪一天。

事件时间戳自然适合作为std::chrono::time_point对象。什么是std最惯用的方式::做这些比较的时间?是否有一个对象表示一天中的某一时间,而不是特定于一天?我要自己滚吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-03 16:53:50

你可以这样做:

代码语言:javascript
运行
复制
auto timePoint = std::chrono::system_clock::now();
std::time_t t = std::chrono::system_clock::to_time_t(timePoint);
auto ltime = std::localtime(&t); // or gmtime.
auto eventTime = std::chrono::hours(ltime->tm_hour)
    + std::chrono::minutes(ltime->tm_min);

auto lower_bound = std::chrono::hours(12) + std::chrono::minutes(0);
auto upper_bound = std::chrono::hours(12) + std::chrono::minutes(5);

if (lower_bound <= eventTime && eventTime <= upper_bound) {
    // Do some action.
}
票数 1
EN

Stack Overflow用户

发布于 2014-08-03 16:53:07

是否有一个对象表示一天中的某一时间,而不是特定于一天?我要自己滚吗?

我不这样认为。但是它的实现应该是微不足道的。将时间点转换为分解时间std::tm,然后检查单个成员.

代码语言:javascript
运行
复制
#include <chrono>
#include <ctime>    // struct tm, gmtime()

using std::chrono::system_clock;

std::time_t ts = system_clock::to_time_t (system_clock::now());
std::tm& time = *gmtime (&ts);  // or localtime()

if (time.tm_hour==12 and time.tm_min>=0 and time.tm_min<5)
    cout << "Inside interval\n";

注意:gmtime()localtime()返回一个指向静态数据的指针,因此是而不是线程安全。Linux (可能还有其他*nix)具有线程安全的gmtime_r()localtime_r()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25106512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档