我正在从外部实时时钟芯片中获取YYYY / MM / DD HH:MM:SS组件。我想将其转换为a,std::chrono::system_clock::timepoint
以便可以获取距大纪元以来的秒数,并更新操作系统的时间。
我想使用Howard Hinnant的建议日期库来执行此转换。
我会直观地做这样的事情:
date::year_month_day ymd = ...;
date::time_of_day tod = ...;
auto sysTime = date + tod;
但我没有看到适当的operator+
重载。我想念什么吗?
这种转换的另一个用例是将日历日期和时间转换成std::chrono::timepoint
我可以传递给boost :: asio :: steady_timer的日期和时间。
通常,atime_of_day
仅用于将持续时间格式化hh:mm:ss.fff
为输出。但是有可能将其time_of_day
转换为std::chrono::duration
:
auto tod = make_time(hours{17} + minutes{16} + seconds{45}); // time_of_day
auto d = seconds(tod); // seconds
在C ++ 14中,我会使用更简洁的方法:17h + 16min + 45s
,但是正如您所提到的,您在C ++ 11中,我将坚持使用C ++ 11代码。
year_month_day
可以将A转换为sys_days
:
auto ymd = jul/29/2015;
auto dp = sys_days{ymd};
并且asys_days
只是a而已,但其system_clock::time_point
分辨率为days
代替microseconds
或nanoseconds
。
然后,您可以添加sys_days
和duration
并将其分配给system_clock::time_point
。放在一起:
#include "date.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono;
auto ymd = jul/29/2015;
auto tod = make_time(hours{17} + minutes{16} + seconds{45});
system_clock::time_point tp = sys_days(ymd) + seconds(tod);
}
在这个简化的示例中,无需经过time_of_day
,而您可以只使用duration
s:
#include "date.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono;
auto ymd = jul/29/2015;
system_clock::time_point tp = sys_days(ymd)
+ hours{17} + minutes{16} + seconds{45};
}
要记住的主要事情sys_days
只是一个粗略的东西system_clock::time_point
,当您从转换为时year_month_day
,您就完全处于std::chrono
系统中,并且可以从那里使用time_point
s和duration
s做任何您想做的事情。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句