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