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

See if a timestamp is between a specific hour

本文关键字:小时 之间 时间戳 是否      更新时间:2023-10-16

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

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

这取决于时间戳的格式,但如果它们是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字段。