【问题标题】:Does there has any easy way to convert "02:00" to minutes say 120? [duplicate]是否有任何简单的方法可以将“02:00”转换为分钟,比如 120? [复制]
【发布时间】:2019-02-17 05:46:27
【问题描述】:

是否有任何简单的方法可以将“02:00”转换为分钟比如 120?

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

【问题讨论】:

  • Do we have to split it to 2 and then * 60 ? 是的。
  • @YSC 我不确定这个骗局。根本不需要将字符串转换为time_t,只需进行更多数学运算即可将其小时和分钟转换为总分钟数。我们可以像 ((time[0] - '0') * 600) + ((time[1] - '0') * 60) + ((time[3] - '0') * 10) + (time[4] - '0') 这样直接从刺痛中做到这一点
  • 是的,它可能会回答 OP 的问题,但不确定。

标签: c++ time


【解决方案1】:

下面是使用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

【讨论】:

    【解决方案2】:

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

    如果我们有

    std::sting time = "12:34"
    

    然后(time[0] - '0') * 600 将使用 600 分钟(time[0] - '0' 将字符 '1' 转换为数字 1)。 (time[1] - '0') * 60 将多出 120 分钟。如果我们继续前进,我们会有

    ((time[0] - '0') * 600) + ((time[1] - '0') * 60) + ((time[3] - '0') * 10) + (time[4] - '0')
    

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

    【讨论】:

      【解决方案3】:

      也许你喜欢这个:

      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;
      

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

      【讨论】:

        猜你喜欢
        • 2016-03-18
        • 2014-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-13
        • 1970-01-01
        • 2014-08-07
        • 2020-04-19
        相关资源
        最近更新 更多