一: std::crono库 用例

chrono是一个time library, 源于boost,现在已经是C++标准。

头文件: #include<chrono>

理解三个概念:duration、time_point、clock

一些用例:

1.Durations

std::chrono::duration 表示一段时间。

int main()
{
	typedef std::chrono::duration<int> seconds_type;
	typedef std::chrono::duration<int, std::milli> milliseconds_type;
	typedef std::chrono::duration<int, std::ratio<60 * 60> > hours_type;

	hours_type h_oneday(24); //24h
	seconds_type s_oneday(60 * 60 * 24); //86400s
	milliseconds_type ms_oneday(s_oneday); // 86400000ms

	seconds_type s_onehour(60 * 60);
	//hours_type h_onehour(s_onehour); //not valid 截断
	hours_type h_onehour(std::chrono::duration_cast<hours_type>(s_onehour));
	milliseconds_type ms_onehour(s_onehour);//valid 没有截断

	std::cout << ms_onehour.count() << "ms in 1h" << std::endl;

	std::cin.get();
	return 0;
}
int main()
{
	using namespace std::chrono;

	milliseconds foo(1000); // 1s
	foo *= 60;

	std::cout << "duration (in periods): ";
	std::cout << foo.count() << " milliseconds.\n";

	std::cout << "duration (in seconds): ";
	std::cout << foo.count() * milliseconds::period::num / milliseconds::period::den;
	std::cout << " seconds.\n";


	std::cin.get();
	return 0;
}

2. Time points

std::chrono::time_point 表示一个具体时间

int main()
{
	using namespace std::chrono;

	system_clock::time_point tp_epoch;

	time_point <system_clock, duration<int> > tp_seconds(duration<int>(1));

	system_clock::time_point tp(tp_seconds);

	std::cout << "1 second since system_clock epoch = ";
	std::cout << tp.time_since_epoch().count();
	std::cout << " system_clock periods." << std::endl;

	std::time_t tt = system_clock::to_time_t(tp);
	//std::cout << "time point tp is: " << ctime_s(tt, sizeof(&tt), &tt);

	std::cin.get();
	return 0;
}

利用转换函数 time_point_cast进行计算:

int main()
{
	using namespace std::chrono;
	
	typedef duration<int, std::ratio<60 * 60 * 24> > days_type;

	time_point<system_clock, days_type> today = time_point_cast<days_type>(system_clock::now());

	std::cout << today.time_since_epoch().count() << "days since epoch" << std::endl;

	std::cin.get();
	return 0;
}

3. Clocks

std::chrono::system_clock 表示当前的系统时钟。

操作有:

now() 当前的时间time_point

to_time_t() time_point转换成time_t秒

from_time_t()从time_t转换成time_point

	using std::chrono::system_clock;

	std::chrono::duration<int, std::ratio<60 * 60 * 24> > one_day(1);

	system_clock::time_point today = system_clock::now();
	system_clock::time_point tomorrow = today + one_day;

	std::time_t tt;

	tt = system_clock::to_time_t(today);
	//std::cout << "today is: " << ctime(&tt);

	tt = system_clock::to_time_t(tomorrow);
	//std::cout << "tomorrow will be: " << ctime(&tt);

	std::cin.get();
	return 0;
发布了35 篇原创文章 · 获赞 5 · 访问量 384

猜你喜欢

转载自blog.csdn.net/qq_33776188/article/details/104612419