std::chrono::duration
// std::ratio表示一个时间单位
// std::chrono::duration表示时间单位的数量
// std::ratio<60,1>表示一个时间单位为60/1 = 60s
// std::ratio<1,1000>表示一个时间单位为1/1000 = 0.001s = 1ms
// std::chrono::duration的第一个类型表示时间单位的类型,可以是int double long等
std::chrono::duration<double, std::ratio<60, 1>> duration(1.5);
// std::chrono::duration_cast完成了不同时间单位数值的强制转换
auto cast = std::chrono::duration_cast<std::chrono::duration<int, std::ratio<1, 1>>>(duration);
// count()返回时间单位的数量
std::cout << cast.count() << std::endl;
std::chrono::time_point
// time_point相当于一个具体的时间
// std::chrono::time_point<
std::chrono::system_clock,
std::chrono::duration<int,std::ratio<1,1>>>
// 第一个泛型类型表示参照的时间类型(system_clock, steady_clock, high_resolution_clock)
// -system_clock,表示从1970年算起
// -steady_clock,表示从系统启动算起
// -hign_resolution_clock,暂时不知道啥意思,用system_clock或steady_clock取代
// 第二个泛型参数表示时间单位
// 一般使用简化的形式,这些形式的精度都是纳秒
std::chrono::system_clock::time_point
std::chrono::steady_clock::time_point
// time_point相当于一个具体的时间,比如2020/01/15 16:11:35
// 1. 必须指定一个clock(system_clock, steady_clock, high_resolution_clock)
// 2. 构造函数既可以是std::chrono::duration类型又可以是std::chrono::time_point类型
std::chrono::time_point<std::chrono::system_clock,std::chrono::duration<int,std::ratio<1,1>>> duration_tp(std::chrono::duration<int,std::ratio<1,1>>(60));
std::chrono::system_clock::time_point time_point_tp(duration_tp);
// time_point的time_since_epoch()是用来获得1970年1月1日到time_point时间经过的duration
std::cout << duration_tp.time_since_epoch().count()<<std::endl; // output: 60
// 可以看出std::chrono::system_clock默认的时间单位类型为纳秒
std::cout << time_point_tp.time_since_epoch().count()<<std::endl; // output: 60,000,000,000
std::chrono::system_clock::now()
std::chrono::duration<int, std::ratio<60 * 60 * 24,1> > one_day(1);
std::chrono::system_clock::time_point today = std::chrono::system_clock::now();
std::chrono::system_clock::time_point tomorrow = today + one_day;
// 调用std::chrono::time_point_cast完成time_point不同时间单位的数值转换
std::chrono::time_point<std::chrono::system_clock, std::chrono::duration<int, std::ratio<60*60*24>>> today = std::chrono::time_point_cast<std::chrono::duration<int, std::ratio<60*60*24>>>(std::chrono::system_clock::now());