gpt4 book ai didi

支持时间运算的C++标准库

转载 作者:搜寻专家 更新时间:2023-10-31 00:09:01 25 4
gpt4 key购买 nike

我有很多“HH:MM”形式的字符串,我经常需要对它们进行算术运算(例如加 5 分钟、加 24 小时等)。

我想知道标准库中是否有任何内置类可以处理此类算法,而不必手动更改字符串和处理极端情况?

最佳答案

如果你没有 strptime可用,如果你有 <chrono>不想玩弄 C API,你可以使用 Howard Hinnant's free, open-source, portable datetime library编写帮助程序与 std::chrono::minutes 相互转换.

所以从字符串转换成分钟,做任何你需要的计算,然后再转换回字符串:

#include "date.h"
#include <iostream>
#include <string>
#include <sstream>

std::chrono::minutes
to_minutes(const std::string& s)
{
std::istringstream in{s};
in.exceptions(std::ios::failbit);
std::chrono::minutes m;
in >> date::parse("%H:%M", m);
return m;
}

std::string
to_string(std::chrono::minutes m)
{
return date::format("%H:%M", m);
}

int
main()
{
using namespace std::chrono_literals;
std::cout << to_string(to_minutes("5:47") + 2h + 168min) << '\n';
}

输出:

10:35

此库已移植到最新版本的 VS、gcc 和 clang。

您还可以使用此库无缝地处理不同的精度,例如秒,甚至毫秒,甚至可以将您需要的所有精度混合在一起:

std::chrono::milliseconds
to_milliseconds(const std::string& s)
{
std::istringstream in{s};
in.exceptions(std::ios::failbit);
std::chrono::milliseconds ms;
in >> date::parse("%T", ms);
return ms;
}

std::string
to_string(std::chrono::milliseconds ms)
{
return date::format("%T", ms);
}

// ...

    std::cout << to_string(to_minutes("5:47") + 2h + 168min +
122s + 465ms + to_milliseconds("1:23:02.123")) << '\n';

输出:

12:00:04.588

关于支持时间运算的C++标准库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45392124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com