有没有简单的方法可以将“ 02:00”转换为分钟,例如120?
我们是否必须将其拆分为2然后* 60?
答案 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
型安全单位答案 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;
在您的情况下,使用这种大型库调用可能会产生很大的开销,但也许您必须处理更复杂的时间字符串。