【发布时间】:2021-06-19 12:32:03
【问题描述】:
我有一个 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();
}
我该如何做相反的事情?如您所见,我在GetISO8601TimeStringFrom 方法中尝试了to_stream,但没有任何结果(它返回一个空字符串)。
【问题讨论】: