我有很多时间戳,以及与之相关的数据。我想检索来自0800 - 0900的数据。有什么方法可以检查时间戳是否介于两者之间? 我应该如何编写一个输入两个小时的函数,并返回一个落在这些小时内的时间戳列表,无论它是哪一天?
喜欢
std::list<uint32_t> getTimestampsBetween(uint16_t min_hour, uint16_t max_hour)
{
if(timestamp from list of timestamp is between min_hour and max_hour)
add it to list;
return list;
}
答案 0 :(得分:2)
使用localtime
将时间戳转换为struct tm
,并检查结构的tm_hour属性是否属于指定的窗口。
查看time.h以获取更多信息。
答案 1 :(得分:0)
这取决于时间戳的格式,但如果它们是time_t
,则取决于时间戳
可以使用mktime
将给定的tm
转换为time_t
和difftime
比较两个time_t
。有点像:
bool
timeIsInInterval( time_t toTest, int minHour, int maxHour )
{
time_t now = time( NULL );
tm scratch = *localtime( &now );
scratch.tm_sec = scratch.tm_min = 0;
scratch.tm_hour = minHour;
time_t start = mktime( &scratch );
scratch.tm_hour = maxHour;
time_t finish = mktime( &scratch );
return difftime( toTest, start ) >= 0.0
&& difftime( toTest, finish ) < 0.0;
}
(实际上,toTest >= start && toTest < finish
可能是
足够。虽然标准允许更多,但我不知道
time_t
不是包含的整数类型的实现
自某个魔法日期以来的秒数。)
当然,这假设您正在寻找两者之间的时间
今天两个小时。如果你想要一些任意日期,很容易修改。
如果您想要任何日期,则需要执行相反的操作:转换时间戳
到tm
,并比较tm_hour
字段。