2014-03-24 157 views
0

我正在尋找一種將int轉換爲時間格式的好方法。例如,我取整數460,它返回5:00,或整數1432,它返回14:32。我能想到的唯一方法是繁瑣地把它變成一個字符串,把它分成兩個字符串,然後檢查兩個字符串是否正確。將整數轉換爲時間格式

謝謝。

+2

你能告訴我們你到底想把時間表示爲一個整數嗎?你已經舉了幾個例子,但是你可以充實一個完整的規範嗎? –

+0

當然,不是問題!基本上我所代表的是CD上歌曲的總播放時間。所以當我添加歌曲時(歌曲1的播放時間爲4:32,歌曲2的時間爲5:10),它創建了一個942的整數,然後我想將其轉換爲適當的時間格式。兩個整數用冒號分隔。秒和分鐘的最大值爲60. – IamDaniel

+0

如果song1的播放時間是4:53而song2的時間是4:57,會發生什麼?那麼看起來使用你的方案的「總數」應該是910,但總的播放時間實際上是9:50而不是9:10。我認爲你需要重新考慮你的表現。 –

回答

0

正如我在我的評論中指出的那樣,我認爲你的表示非常成問題。我建議你以秒爲單位表示一切,並使用一些簡單的計算來分析分鐘/小時。

class PlayTime { 
    size_t sec; 

    public: 
    PlayTime(size_t hours = 0, size_t minutes = 0, size_t seconds = 0) 
     : sec(hours*60*60 + minutes*60 + seconds) {} 

    size_t hours() const { return sec/(60*60); } 
    size_t minutes() const { return (sec/60)%60; } 
    size_t seconds() const { return sec%60; } 

    PlayTime & operator +=(const PlayTime &that) { 
     this-> sec += that.sec; 
     return *this; 
    } 
}; 

PlayTime operator+(PlayTime a, Playtime b) { return a+=b; } 
0

由於您的示例不夠精確,因此很難給出直接答案。你沒有說過你想如何存儲轉換後的時間。你是否有某種課程,或者只是想將它存儲在string?如果是後者,你可能會使用一個stringstream

unsigned int number = 460; 

std::stringstream parser; 
if((number/100)+(number%100)/60<10) parser << "0"; // trailing 0 if minutes < 10 
parser << (number/100)+(number%100)/60    // minutes 
     << ':';          // separator 
if((number%100)%60<10) parser << "0";    // trailing 0 if seconds < 10 
parser << (number%100)%60;       // seconds 

std::string time = parser.str(); 

注意hovewer說這不是做到這一點的最好辦法。 C++提供了一個<ctime>頭文件,其中包含tm結構,如果使用that代替,它會更好。

0

爲了便於兼容和便攜,您可能需要查看標準C運行時庫函數來管理time_t。它代表自1970-01-01T00:00:00 +0000 UTC以來的秒數。


現在你已經發布你的意圖(4分鐘存儲43232秒),請注意使用此格式簡單的計算是不爽快。例如,從4:32開始30秒後是什麼?它似乎是462.