将整数转换为时间格式
问题描述:
我正在寻找一种将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。我认为你需要重新考虑你的表现。 –