我从车外实时时钟芯片获得YYYY / MM / DD HH:MM:SS组件。我想将其转换为std::chrono::system_clock::timepoint
,以便我可以获得自Epoch以来的秒数并更新操作系统的时间。
我想使用Howard Hinnant提议的date库来执行此转换。
我会直觉地做这样的事情:
date::year_month_day ymd = ...;
date::time_of_day tod = ...;
auto sysTime = date + tod;
但我没有看到适当的operator+
重载。我错过了什么吗?
此类转换的另一个用例是将日历日期和时间转换为std::chrono::timepoint
,我可以传递给boost::asio::steady_timer。
答案 0 :(得分:2)
通常,time_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
可以转换为sys_days
,其中包含:
auto ymd = jul/29/2015;
auto dp = sys_days{ymd};
而sys_days
只不过是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
:
#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
系统,可以使用duration
和cols <- names(survey)
for(col in cols) {
print(col)
weights <- information.gain(DIGITAL~col, survey)
print(weights)
}
来执行您想要的任何操作。