std::chrono库

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;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值