将整数转换为时间格式

问题描述:

我正在寻找一种将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。我认为你需要重新考虑你的表现。 –

正如我在我的评论中指出的那样,我认为你的表示非常成问题。我建议你以秒为单位表示一切,并使用一些简单的计算来分析分钟/小时。

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.