日期和时间工具

C++ 包含对二类时间操作的支持:

目录

chrono

chrono 库定义三种主要类型(时长、时钟和时间点)以及工具函数和常用 typedef 。

时长

时长由时间跨度组成,定义为某时间单位的某个计次数。例如,“ 42 秒”可表示为由 42 个 1 秒时间点位的计次所组成的时长。

定义于头文件 <chrono>
定义于命名空间 std::chrono
(C++11)
时间区间
(类模板)

时钟

时钟由起点(或纪元)及计次频率组成。例如,时钟可以拥有 1970 年 1 月 1 日的纪元,和每一秒的计次。 C++ 定义三种时钟类型:

定义于头文件 <chrono>
定义于命名空间 std::chrono
(C++11)
来自系统范畴实时时钟的壁钟时间
(类)
(C++11)
决不被调整的单调时钟
(类)
拥有可用的最短计次周期的时钟
(类)

时间点

时间点是从特定时钟的纪元开始经过的时间时长。

定义于头文件 <chrono>
定义于命名空间 std::chrono
(C++11)
时间中的点
(类模板)

C 风格日期与时间库

亦提供 C 风格日期与时间函数,例如 std::time_tstd::difftimeCLOCKS_PER_SEC

示例

此示例显式关于函数调用执行时间的信息:

#include <iostream>
#include <chrono>
#include <ctime>
 
long fibonacci(unsigned n)
{
    if (n < 2) return n;
    return fibonacci(n-1) + fibonacci(n-2);
}
 
int main()
{
    std::chrono::time_point<std::chrono::system_clock> start, end;
    start = std::chrono::system_clock::now();
    std::cout << "f(42) = " << fibonacci(42) << '\n';
    end = std::chrono::system_clock::now();
 
    std::chrono::duration<double> elapsed_seconds = end-start;
    std::time_t end_time = std::chrono::system_clock::to_time_t(end);
 
    std::cout << "finished computation at " << std::ctime(&end_time)
              << "elapsed time: " << elapsed_seconds.count() << "s\n";
}

可能的输出:

f(42) = 267914296
finished computation at Mon Jul 29 08:41:09 2013
elapsed time: 0.670427s

版本历史

  • (当前 | 先前 2017年8月31日 (四) 21:39Fruderica讨论 | 贡献 . . (2,423字节) (0). . (撤销)
  • 当前 | 先前 2017年8月30日 (三) 14:01Fruderica讨论 | 贡献 . . (2,423字节) (-3). . (撤销)
  • 当前 | 先前 2017年8月30日 (三) 14:01Fruderica讨论 | 贡献. . (2,426字节) (-1,311). . (撤销)
  • 当前 | 先前 2017年7月9日 (日) 23:24Zy2625讨论 | 贡献. . (3,737字节) (-6). . (撤销)
  • 当前 | 先前 2017年2月22日 (三) 03:32116.30.221.101讨论. . (3,743字节) (-2). . (撤销)
  • 当前 | 先前 2017年2月22日 (三) 03:31116.30.221.101讨论. . (3,745字节) (-3). . (撤销)
  • 当前 | 先前 2014年10月26日 (日) 17:39P12bot讨论 | 贡献 . . (3,748字节) (0). . (Fix some translations) (撤销)
  • 当前 | 先前 2013年7月9日 (二) 03:07P12bot讨论 | 贡献 . . (3,748字节) (+6). . (Allow search engines to index popular pages.) (撤销)
  • 当前 | 先前 2013年7月2日 (二) 08:19P12bot讨论 | 贡献 . . (3,742字节) (-125). . (Use {{lc}}. Update links. Various fixes.) (撤销)
  • 当前 | 先前 2012年11月2日 (五) 17:01P12bot讨论 | 贡献 . . (3,867字节) (+145). . (r2.7.3) (机器人添加:de, en, es, fr, it, ja, pt, ru) (撤销)
  • 当前 | 先前 2012年10月26日 (五) 10:49P12讨论 | 贡献 . . (3,722字节) (0). . (1个修订: Translate from the English version) (撤销)
  • 当前 | 先前 2012年10月26日 (五) 07:00TranslationBot讨论 | 贡献. . (3,722字节) (-81). . (Translated from the English version using Google Translate) (撤销)
  • 当前 | 先前 2012年10月25日 (四) 14:14P12讨论 | 贡献 . . (3,803字节) (0). . (1个修订: Translate from the English version) (撤销)
  • 当前 | 先前 2012年10月25日 (四) 13:00TranslationBot讨论 | 贡献. . (3,803字节) (+3,798). . (Translated from the English version using Google Translate) (撤销)
  • 当前 | 先前) 2012年9月23日 (日) 18:27220.189.247.4讨论. . (5字节) (+5). . (以“ ----”为内容创建页面)