2015-06-10 74 views
1

我需要將string時間轉換爲unsigned int我測試我的程序與atoi/strtoul/atolstring stream但他們不能正常工作我錯過了什麼?如何將字符串時間轉換爲無符號整數在c + +

string CurrentTime(){ 
     time_t rawtime; 
     struct tm * timeinfo; 
     char bffr [80]; 

     time (&rawtime); 
     timeinfo = localtime (&rawtime); 

     strftime (bffr,80,"%T",timeinfo); 
     // puts (bffr); 

     return bffr; 
    } 

    int main(){ 
    string new_time; 
    new_time = CurrentTime(); 
    stringstream strValue; 
     strValue << new_time; 
    unsigned int stime; 
     strValue >> stime; 
    cout<<stime<<endl; 
    cout<<new_time<<endl; 
    } 

int main(){ 
     string new_time; 
     new_time = CurrentTime(); 
unsigned int stime =atoi(new_time.c_str()); 
cout<<stime<<endl; 
cout<<new_time<<endl; 

但他們兩人的打印stime:僅僅只有每小時例如10

和打印new_time:例如10:20:15

回答

-1

看來%T沒有按」 t與strftime函數調用很好。

但是有一個解決方法。 %T實際上是%H:%M:%S

因此,

的strftime(bffr,80, 「%H:%M:%S」,timeinfo);

應該適合您的代碼。

+0

K.Prabhu我測試過,但並沒有改變,NEW_TIME正常工作我在轉換字符串問題unsigned int類型 – girl71

1

由於分隔符「:」,您的字符串流不工作。你需要繞過它。試試下面的代碼:

string new_time; 
new_time = CurrentTime(); 
std::string finalstring; 
std::string delim = ":"; 
size_t pos = 0; 
while ((pos = new_time.find(delim)) != std::string::npos) 
{ 
    finalstring += new_time.substr(0, pos); 
    new_time.erase(0, pos + delim.length()); 
} 

stringstream strValue; 
strValue << finalstring; 
strValue << new_time; 
unsigned int stime; 
strValue >> stime; 
cout << stime << endl; 
+0

坦克你我的反應是'135559'小時分秒不': ' – girl71

+0

@ girl71:不,我不這麼認爲。在你的函數strftime中,你使用的是ISO 8601標準的「%T」。結果結果應該在HH:MM:SS中。重新檢查你的輸入,並參考http://www.cplusplus.com/reference/ctime/strftime/ – Spanky

+0

我重新檢查轉換小時分秒響應沒有':'響應'new_time'是真的 – girl71

相關問題