chrono 使用备注

chrono 使用备注
chrono 是一个命名空间,用于时间相关的库。
包括
Durations:时长类
Durations 的实现类有如下:
hours 时
minutes 分
seconds 秒
milliseconds 毫秒
microseconds 微秒
nanoseconds 纳秒

Time points 时间点,记录某个时刻
Clocks
将时间点与实际物理时间相关联的框架。

该库至少提供三个时钟,它们提供了将当前时间表示为时间点的方法:system_clock(系统时钟)、steady_clock(稳定时钟)和high_resolution_clock(高分辨率时钟)。

Durations 示例:

#include <iostream>
#include <ratio>
#include <chrono>

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);            // 3600s
//hours_type h_onehour (s_onehour);          // NOT VALID (type truncates), use:
  hours_type h_onehour (std::chrono::duration_cast<hours_type>(s_onehour));
  milliseconds_type ms_onehour (s_onehour);  // 3600000ms (ok, no type truncation)

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

  return 0;
}
// duration::zero
#include <iostream>
#include <chrono>

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

  steady_clock::time_point t1 = steady_clock::now();

  std::cout << "Printing out something...\n";

  steady_clock::time_point t2 = steady_clock::now();

  steady_clock::duration d = t2 - t1;

  if ( d == steady_clock::duration::zero() )
    std::cout << "The internal clock did not tick.\n";

  else
    std::cout << "The internal clock advanced " << d.count() << " periods.\n";

  return 0;
}
// duration::min/max
#include <iostream>
#include <chrono>

int main ()
{
  std::cout << "system_clock durations can represent:\n";
  std::cout << "min: " << std::chrono::system_clock::duration::min().count() << "\n";
  std::cout << "max: " << std::chrono::system_clock::duration::max().count() << "\n";
  return 0;
}

Clocks 示例:

// system_clock example
#include <iostream>
#include <ctime>
#include <ratio>
#include <chrono>

//获取当前时间转换成字符串
int main ()
{
  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);

  return 0;
}

//计算时间间隔

// system_clock::from_time_t
#include <iostream>
#include <ctime>
#include <ratio>
#include <chrono>

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

  // create tm with 1/1/2000:
  std::tm timeinfo = std::tm();
  timeinfo.tm_year = 100;   // year: 2000
  timeinfo.tm_mon = 0;      // month: january
  timeinfo.tm_mday = 1;     // day: 1st
  std::time_t tt = std::mktime (&timeinfo);

  system_clock::time_point tp = system_clock::from_time_t (tt);
  system_clock::duration d = system_clock::now() - tp;

  // convert to number of days:
  typedef duration<int,std::ratio<60*60*24>> days_type;
  days_type ndays = duration_cast<days_type> (d);

  // display result:
  std::cout << ndays.count() << " days have passed since 1/1/2000";
  std::cout << std::endl;

  return 0;
}

duration_cast 进行时长转换
更多参考chrono

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值