在c++11中进行相对时间比较的最干净的方法
cleanest way to do relative time-of-day comparisons in c++11
假设我有一个事件流,每个事件都有一个完整的时间戳,跨越许多天。我想将它们与一天中的时间进行比较,但无论哪一天。例如,如果给定的事件发生在12:00:00到12:05:00之间,那么就做一些事情,但与日期无关。
事件时间戳适合std::chrono::time_point对象。在std::chrono中进行这些比较的最惯用的方法是什么?有没有一个对象可以表示一天中的某个时间,而不是特定于某一天?我要自己卷吗?
你可以这样做:
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.
}
是否有一个对象表示一天中的时间而不特定于某一天?我要自己卷吗?
我不这么认为。但是实现起来应该很简单。将时间点转换为分解时间std::tm
,然后检查各个成员。
#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 intervaln";
注意:gmtime()
和localtime()
返回一个指向静态数据的指针,因此不是线程安全的。Linux(可能还有其他*nix)有线程安全的gmtime_r()
和localtime_r()
。
相关文章:
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?
- 比较两个节点坐标的最佳方法是什么?
- 比较C++中两个整数的最有效和最干净的方法是什么?
- 比较C++变量的最有效方法
- "operator()"在重载运算符方法中是什么意思,在priority_queue(STL)中用作C++中的比较器?
- 比较"A"、"C"、"G"'T'字符的最快方法
- 任何方法都可以在C++中比较数据结构中的许多方法
- 是否有任何统一的方法可以在 c++ 中创建自定义比较器?
- 在 c++ 中比较不相等数组或字符串的方法
- 使用 lambda 比较初始化优先级队列的方法
- C# 通用比较方法 [C++模板的类似物]
- 比较字符* (C/C++) 的最快方法?
- 获取字符串大小的各种方法之间的比较
- C 是否具有对两个STD :: sets,vectors等进行三角比较的标准方法
- 比较两个文件中的两个中间人的最佳方法.C++
- sort() 方法 c++ 中的比较器函数.为大量数字获得不同的解决方案
- 比较数据库搜索方法
- C++ 将整数与硬编码的整数集进行比较的更简单方法
- C++方法与Java的比较(从Java到C ++的语法)
- 正确的方法比较两个指向算法中使用的指向算法