查看时间戳是否在特定小时之间

时间:2012-03-27 07:12:11

标签: c++ unix-timestamp

我有很多时间戳,以及与之相关的数据。我想检索来自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;
}

2 个答案:

答案 0 :(得分:2)

使用localtime将时间戳转换为struct tm,并检查结构的tm_hour属性是否属于指定的窗口。 查看time.h以获取更多信息。

答案 1 :(得分:0)

这取决于时间戳的格式,但如果它们是time_t,则取决于时间戳 可以使用mktime将给定的tm转换为time_tdifftime 比较两个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字段。