我正在寻找一种将int转换为时间格式的好方法。例如,我接受整数460,它返回5:00,或整数1432,它返回14:32。我能想到的唯一方法是将它变成一个字符串,将其分成两个字符串,并检查两个字符串的正确性。
谢谢。
答案 0 :(得分: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();
请注意,这不是最好的方法。 C ++提供了一个<ctime>
标题,其中包含tm
结构,如果您使用that则会更好。
答案 1 :(得分:0)
为了便于兼容性和可移植性,您可能希望查看用于管理time_t
的标准C运行时库函数。它表示自1970-01-01T00:00:00 + 000000 UTC以来的秒数。
现在您已经发布了您的意图(4分32秒存储为432),请注意使用此格式的简单计算并不简单。例如,从4:32开始30秒后是什么?它似乎是462。
答案 2 :(得分: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; }