2012-03-27 129 views
0

我有很多时间戳和与其关联的数据。我想检索来自说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

http://cplusplus.com/reference/clibrary/ctime/localtime/和http://cplusplus.com/reference/clibrary/ctime/tm/ – BoBTFish 2012-03-27 07:19:38

回答

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字段。

+0

我拥有的时间戳是以秒为单位的时代.. – 2012-03-28 06:47:34

+0

我发现了一种简单的方法,将时间戳除以86400,并获得从上午12点过去的秒数。这样我可以很容易地得到一天的时间。我只需要将小时乘以3600即可! :) – 2012-03-28 06:48:44

2

使用localtime到时间戳转换为struct tm,并检查结构的tm_hour属性落在规定的范围内。 查看time.h获取更多信息。

相关问题