2012-03-27 102 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獲取更多信息。

相關問題