Обычно 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
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
и duration
все, что хотите.
person
Howard Hinnant
schedule
29.07.2015