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;