void test_chrono_duration()
{
// template <class Rep, class Period = ratio<1> > class duration;
//Rep表示一种数值类型,用来表示Period的数量,比如int float double
//Period是ratio类型,用来表示【用秒表示的时间单位】
//ratio表示一个分数值, template <intmax_t N, intmax_t D = 1> class ratio;N代表分子,D代表分母
//ratio<1, 1>表示单位时间是1秒
//成员函数count()返回Rep类型的Period数量
//秒
using second_type = std::chrono::duration<int>;
second_type second_duration(10);
//std::cout << second_duration.count() << std::endl;
//毫秒
using milli_type = std::chrono::duration<int, std::milli>;
milli_type milli_duation(10000);
//std::cout << second_duration.count() << std::endl;
//小时
using hour_type = std::chrono::duration<float, std::ratio<60 * 60> >;
hour_type hour_duation(0.02);
//std::cout << hour_duation.count() << std::endl;
//duration_cast
hour_type h_hour(std::chrono::duration_cast<hour_type>(second_duration));
std::chrono::milliseconds foo(2000);
std::cout << foo.count() <<" milliseconds"<< std::endl;
std::cout << std::chrono::milliseconds::period::num << std::endl;
std::cout << std::chrono::milliseconds::period::den<< std::endl;
std::cout << foo.count() * std::chrono::milliseconds::period::num / std::chrono::milliseconds::period::den
<<" seconds"<< std::endl;
// std::this_thread::sleep_for(h_hour);
}
//std::chrono::time_point 表示一个具体时间
//一个time point必须有一个clock计时
// template <class Clock, class Duration = typename Clock::duration> class time_point;
//函数time_from_eproch()用来获得1970年1月1日到time_point时间经过的duration
//如果timepoint以天为单位,函数返回的duration就以天为单位
//std::chrono::system_clock 它表示当前的系统时钟
//每一个clock类中都有确定的time_point, duration, Rep, Period类型
//操作有:
//now() 当前时间time_point
//to_time_t() time_point转换成time_t秒
//from_time_t() 从time_t转换成time_point
void test_time_point()
{
/*std::chrono::system_clock::time_point tp_epoch;
std::chrono::time_point<std::chrono::system_clock, std::chrono::duration<int> > tp_seconds(std::chrono::duration<int>(1));
std::chrono::system_clock::time_point tp(tp_seconds);
std::cout << "1 second since system_clock epoch = ";
std::cout << tp.time_since_epoch().count() << std::endl;;
std::time_t tt = std::chrono::system_clock::to_time_t(tp);
std::cout << "time_point tp is: " << ctime(&tt) << std::endl;;
std::chrono::duration<int, std::ratio<60 * 60 * 24> > 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::time_t tt2= std::chrono::system_clock::to_time_t(today);
std::cout << "today is: " << ctime(&tt2);
tt2 = std::chrono::system_clock::to_time_t(tomorrow);
std::cout << "tomorrow will be: " << ctime(&tt2);*/
auto now = std::chrono::system_clock::now();
time_t t = std::chrono::system_clock::to_time_t(now);
std::cout << "all seconds: " << t << std::endl;
/*typedef std::chrono::duration<int, std::ratio<60 * 60 * 24>> days_type;
std::chrono::time_point<std::chrono::system_clock, days_type> today = std::chrono::time_point_cast<days_type>(std::chrono::system_clock::now());
*/
std::tm now_time; //等价于struct tm now_time
//localtime_s也是用来获取系统时间,运行于windows平台下
localtime_s(&now_time, &t);
//localtime_r也是用来获取系统时间,运行于linux平台下
//localtime_r(&t, &now_time);
auto time = std::put_time(&now_time, "%Y %b %d %H:%M:%S");
std::cout <<"时间 "<< time << std::endl;
}
//high_resolution_clock::now(): Returns a time point representing the current point
// std::cout<<duration_cast<seconds>(high_resolution_clock::now().time_since_epoch()).count()<<std::endl;
std::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();
std::chrono::seconds t(2);
std::this_thread::sleep_for(t);
std::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> diff = t2 - t1;
std::cout<<"diff="<<diff.count()<< std::endl;
std::chrono::duration<double, std::milli> diff2 = (t2 - t1);
std::cout << diff2.count()<< std::endl;