gpt4 book ai didi

c++ - 将 std::chrono::milliseconds 转换为 ISO 8601 字符串

转载 作者:行者123 更新时间:2023-12-04 07:29:06 25 4
gpt4 key购买 nike

我有一个 std::chrono::milliseconds以毫秒为单位表示纪元 unix 时间。我需要将其转换为遵循 ISO 8601 格式的字符串,例如 2020-02-25T00:02:43.000Z .
使用 date库我能够解析它,跟随 GetMillisecondsFromISO5601String方法:

#include "TimeConversion.hpp"
#include <date/date.h>

using std::string;
using std::string_view;
using std::chrono::milliseconds;

string TimeConversion::GetISO8601TimeStringFrom(const milliseconds& ms) {
std::stringstream ss;
date::to_stream(ss, "%FT%T%z", ms);
return ss.str();
}

milliseconds TimeConversion::GetMillisecondsFromISO5601String(string_view s) {
std::istringstream in{ std::move(string(s)) };
in.exceptions(std::ios::failbit);
date::sys_time<milliseconds> tp;
if (*s.rbegin() == 'z') {
in >> date::parse("%FT%T%z", tp);
}
else if (*s.rbegin() == 'Z') {
in >> date::parse("%FT%T%Z", tp);
}
else {
in >> date::parse("%FT%T%", tp);
}
return tp.time_since_epoch();
}

我怎样才能做相反的事情?我正在尝试 to_streamGetISO8601TimeStringFrom方法如您所见,但没有任何结果(它返回一个空字符串)。

最佳答案

问题是您正在处理时间 duration ( milliseconds ) 作为 time_point ( time_point<system_clock, milliseconds> )。您需要做的就是转换 durationtime_point具有显式转换语法。日期库对此类型有一个方便的类型别名:sys_time<milliseconds> :

string TimeConversion::GetISO8601TimeStringFrom(const milliseconds& ms) {
date::sys_time<milliseconds> tp{ms};
// continue using tp ...
您也可以使用更方便的 format函数代替 to_stream :
string TimeConversion::GetISO8601TimeStringFrom(const milliseconds& ms) {
return date::format("%FT%T%z", date::sys_time<milliseconds>{ms});
}

关于c++ - 将 std::chrono::milliseconds 转换为 ISO 8601 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68046787/

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