通常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,您可以直接使用durations:
#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 转换为year_month_day 时,你就完全在std::chrono 系统中,可以做任何你想做的事情time_points 和 durations 从那里开始。