Посмотрите, если метка времени находится между определенным часом - PullRequest
0 голосов
/ 27 марта 2012

У меня много временных меток и данных, связанных с ними. Я хочу получить данные, которые были получены, скажем, от 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 ]

2 голосов
/ 27 марта 2012

используйте localtime для преобразования метки времени в struct tm и проверьте, попадает ли атрибут tm_hour структуры в указанное окно.Посмотрите на time.h для получения дополнительной информации.

0 голосов
/ 27 марта 2012

Это зависит от формата временных меток, но если они 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.

...