c++ - std::chrono::from_stream 正确用法
问题描述
我正在考虑使用函数从likestd::chrono::from_stream (std::chrono::year_month_day)
获取std::chrono::year_month_day
对象。const std::string&
2018-12-09T00:00:00
在 cppreference 中没有使用示例std::chrono::from_stream
。所以我想,它可以像std::get_time
.
但是有一个问题!std::chrono::year_month_day
有非常奇怪的参数(个人意见)
(std::basic_istream<CharT, Traits>& is, const CharT* fmt, std::chrono::year_month_day& ymd, std::basic_string<CharT, Traits, Alloc>* abbrev = nullptr, std::chrono::minutes* offset = nullptr)
并以未知原因返回std::basic_istream
,所以我意识到我真的不知道如何正确使用它。
请问有人知道吗?谢谢。
解决方案
首先,from_stream
适用于流,而不是字符串。如果要使用字符串,则必须先通过流:
std::istringstream iss("2018-12-09T00:00:00");
现在您期望的功能实际上是parse,而不是from_stream
. 它像其他操纵器一样工作,例如get_time
,并将其工作委托给from_stream
:
std::chrono::year_month_day date;
if (not (iss >> std::chrono::parse("%FT%T", date))) {
// Handle error
}
这相当于from_stream(iss, "%FT%T", date)
.
您可以在Howard 的 CppCon talk on time zone中看到一些解析的用法。他继续展示使用额外参数来确定实际解析的时区缩写和偏移量的示例,但这与您问题中的用例无关。(霍华德是该库的作者,也是推动其标准化的人。)
推荐阅读
- javascript - 使用 javascript 库“turn.js”和 html 创建翻书
- django - Django ModelChoiceField 在列表中显示客户对象(1)等,我如何让它显示客户名称?
- azure - 不能直接在门户中开发第二个Azure功能(只允许在门户中开发第一个功能)
- python - 向 seaborn regplot 和 residplot 添加自定义误差线
- next.js - /node_modules/@prisma/client/runtime/index.js 找不到模块:无法解析“async_hooks”
- java - Eclipse乐山LwM2M构建失败
- html - 使用 redux 跟踪最近查看的产品,可以吗?
- excel - VBA 中的 Excel 错误“运行时错误‘424’:SET 语句需要对象
- oracle - 测试容器甲骨文
- caching - 任何能够缓存 WebSocket 数据的 CDN