我正在尋找一種將int轉換爲時間格式的好方法。例如,我取整數460,它返回5:00,或整數1432,它返回14:32。我能想到的唯一方法是繁瑣地把它變成一個字符串,把它分成兩個字符串,然後檢查兩個字符串是否正確。將整數轉換爲時間格式
謝謝。
我正在尋找一種將int轉換爲時間格式的好方法。例如,我取整數460,它返回5:00,或整數1432,它返回14:32。我能想到的唯一方法是繁瑣地把它變成一個字符串,把它分成兩個字符串,然後檢查兩個字符串是否正確。將整數轉換爲時間格式
謝謝。
正如我在我的評論中指出的那樣,我認爲你的表示非常成問題。我建議你以秒爲單位表示一切,並使用一些簡單的計算來分析分鐘/小時。
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; }
由於您的示例不夠精確,因此很難給出直接答案。你沒有說過你想如何存儲轉換後的時間。你是否有某種課程,或者只是想將它存儲在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代替,它會更好。
爲了便於兼容和便攜,您可能需要查看標準C運行時庫函數來管理time_t
。它代表自1970-01-01T00:00:00 +0000 UTC以來的秒數。
現在你已經發布你的意圖(4分鐘存儲43232秒),請注意使用此格式簡單的計算是不爽快。例如,從4:32開始30秒後是什麼?它似乎是462.
你能告訴我們你到底想把時間表示爲一個整數嗎?你已經舉了幾個例子,但是你可以充實一個完整的規範嗎? –
當然,不是問題!基本上我所代表的是CD上歌曲的總播放時間。所以當我添加歌曲時(歌曲1的播放時間爲4:32,歌曲2的時間爲5:10),它創建了一個942的整數,然後我想將其轉換爲適當的時間格式。兩個整數用冒號分隔。秒和分鐘的最大值爲60. – IamDaniel
如果song1的播放時間是4:53而song2的時間是4:57,會發生什麼?那麼看起來使用你的方案的「總數」應該是910,但總的播放時間實際上是9:50而不是9:10。我認爲你需要重新考慮你的表現。 –