2013-03-12 110 views
0

我期望以下方法返回到當前日期之後的特定時間內剩餘的秒數。例如如果當前時間是「19:00」,則GetRemainedSeconds("19:01")應該返回60,表示在給定時間之前剩餘60秒。調用GetRemainedSeconds("18:59")應返回-60。問題是下面的函數顯示隨機行爲。有時它會返回正確的值,有時它不會(即使在同一臺機器上運行)。這段代碼有什麼問題?如何獲得剩餘的秒數,直到指定的時間

int GetRemainedSeconds (const std::string &timeString, bool &isValid) 
{ 
    struct tm when; 
    char* p; 

    p = strptime (timeString.c_str(), "%H:%M", &when); 

    if (p == NULL || *p != '\0') 
    { 
     std::cout << "Invalid 24h time format" << std::endl; 
     isValid = false; 
     return 0; 
    } 

    struct tm now; 

    isValid = true; 
    time_t nowEpoch = time (0); // current epoch time 

    struct tm tmpTime; 
    now = *localtime_r (&nowEpoch, &tmpTime); 

    when.tm_year = now.tm_year; 
    when.tm_mon = now.tm_mon; 
    when.tm_mday = now.tm_mday; 
    when.tm_zone = now.tm_zone; 
    when.tm_isdst = now.tm_isdst; 
    time_t whenEpoch = mktime (&when); 

    return (whenEpoch - nowEpoch); 
} 

回答

2

您需要設置when.tm_sec的東西(可能是零)。它包含了前一次調用發生的任何垃圾,這不是你想要的。

是的,你也應該設置when.tm_isdst有意義的東西。

0

這裏有一個問題:

when.tm_isdst = when.tm_isdst; 

你設置when.tm_isdst它本身,這只是一些初始化的垃圾。

我想你的意思是說:

when.tm_isdst = now.tm_isdst; 
+0

你是對的,這是一個錯字。 – Meysam 2013-03-12 14:11:37

相關問題