在C ++中以hh:mm格式添加时间

时间:2016-12-09 17:07:57

标签: c++

如何在C ++中完成?

示例:

time1 = 04:45; 
time2 = 02:25; 
result = time1 + time2;
result = 07:10

在哪个日期类型(字符串,双精度等)应保存时间值?

编辑: 是否可以从此代码中获取int h = 23int m = 14?换句话说,如何打印%H和%M?

int main()
{
    std::tm t = {};
    std::istringstream ss("23:12");
    ss >> std::get_time(&t, "%H:%M");
    if (ss.fail()) {
        std::cout << "Parse failed\n";
    } else {
        std::cout << std::put_time(&t, "%R") << '\n';
    }
}

2 个答案:

答案 0 :(得分:2)

查看<chrono>标准C ++ 11标头。另请参阅this question

您可以将"04:25"字符串(阅读更多关于std::string,其中包含相当丰富的API)转换为一段时间(实际上是time_point或{{1 }或者clock)并在那个时间工作。

在POSIX系统(尤其是Linux)上,您可能会使用(即使使用旧的C ++或纯C语言)与时间相关的函数(阅读time(7) ...),例如strftime(3)和{{ 3}}(另见strptime(3)&amp; localtime(3) ...)

或者,您可能只是简单地计算分钟,并且duration应该timelocal(3)"04:45"的洞察力(十进制,使用parsed进行转换,甚至是{ {3}} C或其std::stoi04* 60 + 45的函数是"07:10",即430;要进行逆向转换,请考虑7*60 +10(给出7)和430/60给出10。

不要忘记启用所有警告&amp;编译时调试信息(例如,如果使用strtol编译,则使用430%60进行编译)并使用调试器(例如g++ -Wall -Wextra -g)来了解程序的行为(例如,通过逐步运行它)步骤和查询其状态。)

你的问题非常基础(并且表明在初级编程和数学方面存在一些困难,与C ++无关)。我强烈建议您花一些时间阅读一些基本的数学教科书(高中水平,解释sscanfGCCquotient),然后modulus(对编程的精彩介绍,不使用C ++),然后是bases & radixes。不要忘记阅读一些关于C ++的SICP

答案 1 :(得分:0)

(代表OP发布解决方案)

我的工作 - 它有效! (灵感来自snps的链接和朋友的帮助)链接

int convert_time_to_minutes(string sss)
{

    istringstream ss(sss);
    string hh,mm;
    getline(ss, hh,':');
    getline(ss, mm,';');


    double h,m; //hours, minutes
    h = atoi(hh.c_str());
    m = atoi(mm.c_str());
    double minutes = (h *60 + m)/60;
    cout << minutes;
    return minutes;

}

两次使用此功能两次,而不是添加两个返回值,结果只需几分钟。