Самым простым и эффективным способом является использование бесплатной библиотеки Говарда Хиннанта с открытым исходным кодом, только заголовок, один заголовок, дата / время :
#include "date/date.h"
...
using namespace date;
using namespace std::chrono;
int Y, M, D, h, m, s, ms;
...
system_clock::time_point tp = sys_days{year{Y}/M/D} +
hours{h} + minutes{m} + seconds{s} + milliseconds{ms};
Все, что делает для вас библиотека даты / времени, - это конвертирование тройки Y / M / D в chrono::time_point<system_clock, days>
. Тогда все остальное выражение - это C ++ 11 <chrono>
.
библиотека даты / времени была включена в черновую спецификацию C ++ 20, поэтому, надеюсь, через несколько лет ваш код станет соответствовать стандарту, просто удалив #include "date/date.h"
и using namespace date;
.
Если по каким-либо причинам вы не можете использовать библиотеку даты / времени , тогда вы можете самостоятельно кодировать days_from_civil
с помощью этой формулы общественного достояния.