将整数转换为时间格式

时间:2014-03-24 23:41:34

标签: c++ time int

我正在寻找一种将int转换为时间格式的好方法。例如,我接受整数460,它返回5:00,或整数1432,它返回14:32。我能想到的唯一方法是将它变成一个字符串,将其分成两个字符串,并检查两个字符串的正确性。

谢谢。

3 个答案:

答案 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; }