有没有简单的方法可以将“ 02:00”转换为分钟,例如120?

时间:2018-09-12 14:32:15

标签: c++ time

有没有简单的方法可以将“ 02:00”转换为分钟,例如120?

我们是否必须将其拆分为2然后* 60?

3 个答案:

答案 0 :(得分:2)

使用Howard Hinnant's date/time library的方法如下:

#include "date/date.h"
#include <cassert>
#include <iostream>
#include <sstream>

int
main()
{
    using namespace date;
    using namespace std;
    using namespace std::chrono;
    istringstream in{"02:00"};
    minutes m;
    in >> parse("%H:%M", m);
    assert(m == 120min);
}

此外,只需删除#include "date/date.h"using namespace date;,即可将其移植到即将发布的C ++ 20规范中。

此技术的优势包括:

  • 无需手动分割字符串
  • 无需从几小时到几分钟的手动转换
  • 结果直接进入chrono型安全单位
  • 无需深入了解旧的C API

答案 1 :(得分:1)

您无需在此处拆分任何内容。在44993, i中,"12:34"代表数十小时,1是一个小时,2是数十分钟,而3是一分钟。知道您可以将每个位置乘以代表的分钟数。

如果有

4

然后std::sting time = "12:34" 将使用600分钟((time[0] - '0') * 600将字符time[0] - '0'转换为数字'1')。 1将需要120分钟。如果我们继续前进,我们将拥有

(time[1] - '0') * 60

所有这些加起来需要754分钟。如果必须多次执行,则可以将其放入函数中。

答案 2 :(得分:1)

也许您喜欢这个:

std::tm tm = {}; 
std::stringstream ss("20:05");
ss >> std::get_time(&tm, "%H:%M");
std::cout << tm.tm_hour * 60 + tm.tm_min << std::endl;

在您的情况下,使用这种大型库调用可能会产生很大的开销,但也许您必须处理更复杂的时间字符串。