Как в С++ 20 преобразовать следующую структуру в std::chrono::system_clock::time_point?
struct Time {
//! Year
unsigned int year;
//! Month
unsigned int month;
//! Day
unsigned int day;
//! Hours
unsigned int hours;
//! Minutes
unsigned int minutes;
//! Seconds
unsigned int seconds;
};
Другими словами, как мне реализовать:
std::chrono::system_clock::time_point convert(Time& time) {
// ?
}
?





С информацией, предоставленной этой структурой, вы можете заполнить std::tm структуру, которую можно преобразовать в time_t через mktime см. https://en.cppreference.com/w/cpp/chrono/c/mktime
Хотя time_t можно преобразовать в steady_clock::time_point через from_time_t, см. https://en.cppreference.com/w/cpp/chrono/system_clock/from_time_t
Используйте год/месяц/день, чтобы создать объект year_month_day и преобразовать его в sys_days, а затем добавить соответствующие часы/минуты/секунды.
std::chrono::system_clock::time_point convert(const Time& time) {
using namespace std::chrono;
return sys_days(
year_month_day(year(time.year), month(time.month), day(time.day)))
+ hours(time.hours) + minutes(time.minutes) + seconds(time.seconds);
}
std::chrono::system_clock::time_point convert(const Time& time)
{
tm convertTM;
convertTM.tm_year = time.year - 1900;
convertTM.tm_mon = time.month - 1; //months since January - [0, 11]
convertTM.tm_mday = time.day;
convertTM.tm_hour = time.hours;
convertTM.tm_min = time.minutes;
convertTM.tm_sec = time.seconds;
return std::chrono::system_clock::time_point(std::chrono::milliseconds(mktime(&convertTM) * 1000));
}