C++ 如何将日期从输入(字符串年、字符串月、字符串日)转换为 time_point

Mic*_*dej 4 c++ time

我的老师说我必须用这样的行转换文件:

Jan Kowalski 1997 4 3
Run Code Online (Sandbox Code Playgroud)

给有游泳池的人上课,比如:

string name, surname;
std::chrono::system_clock::time_point dateofbirth;
Run Code Online (Sandbox Code Playgroud)

如何从 3 个整数创建时间点?我想这不是存储这种数据的最简单方法。

“对特定时间点的引用,例如一个人的生日、今天的黎明或下一列火车经过的时间。在这个库中,time_point 类模板的对象通过使用相对于一个纪元(这是一个固定点)的持续时间来表达这一点使用相同时钟的所有 time_point 对象共有的时间)。”

但是我如何从这些数据中获得持续时间?

我想我应该从以下内容开始:

using std::chrono::system_clock;
system_clock::time_point today = system_clock::now();
std::chrono::duration<int, std::ratio<60 * 60 * 24> > one_day;
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以首先将出生日期存储在 std::tm ( http://en.cppreference.com/w/cpp/chrono/c/tm ) 中,该结构包含分解为各个组件的日期和时间。例如:

std::tm tm;
tm.tm_mday = 3;
tm.tm_mon = 4;
tm.tm_year = 1977;
Run Code Online (Sandbox Code Playgroud)

这个 std::tm 结构可以转换为 std::time_t ( http://en.cppreference.com/w/c/chrono/time_t ),它保存自纪元以来的秒数。

std::time_t tt = timegm(&tm);
Run Code Online (Sandbox Code Playgroud)

反过来,它可用于创建您正在寻找的 std::chrono::system_clock::time_point :

std::chrono::system_clock::time_point dateofbirth = std::chrono::system_clock::from_time_t(tt);
Run Code Online (Sandbox Code Playgroud)