目录
1.引用
2.chrono库
2.1.Duration
2.2.Clock
2.3.TimePoint
2.4.Calendar(c++20)
3.ctime库
4.常见用法
4.1. 获取当前系统时间戳
4.2.计算时间间隔
4.3.格式化输出
4.4.字符串转化为时间戳
4.5.时间戳转为time_point类型
4.6.字面量使用
5.总结
unix timestamp(时间戳): 时间戳是计算中广泛使用的日期和时间表示形式。它通过自1970年1月1(Unix 纪元)00:00:00 UTC以来经过的秒数(秒是毫秒、微妙、纳秒的总称)来测量时间,没有因闰秒而进行调整。
C++中处理时间的库主要包括和
库是C++11引入的一个标准库,专门用于处理时间点、时间间隔和时钟操作。它提供了高精度的时间点和时长表示,以及时间相关的函数和操作。C++20新增Calendar。
主要包含以下四种类型:
- Duration:表示一个时间间隔,单位可以是秒、毫秒、微秒等。
- Time Point:表示一个时间点,通常基于某个时钟。
- Clock:提供当前时间,通常有三种时钟类型:系统时钟()、高精度时钟()和稳定时钟()。
- Calendar(c++20)
Duration(时间间隔):表示一段时间的长度,这个类模板是时间间隔的抽象表示,可以存储任何时间单位的间隔,比如秒、毫秒、分钟等。 允许程序员进行时间间隔的计算,比如加法、减法、比较等,并且可以与时间点(如 )结合使用来表示具体的时间。
模板类接受两个参数:
- rep:表示时间间隔的数值类型,通常是整数类型,如 、 或 。
- period:表示时间间隔的单位,是一个编译时常量表达式,通常是 类型。 是一个模板类,用于表示两个整数的比率。标准库中定义了几个常用的 类型的别名,如 (表示纳秒,即10^-9秒)、(表示微秒,即10^-6秒)、(表示毫秒,即10^-3秒)、(表示秒)、(表示分钟)、(表示小时)等。
为了方便使用,标准库为常见的时间单位提供了 的特化版本:
- 纳秒(nanoseconds):
- 微秒(microseconds):
- 毫秒(milliseconds):
- 秒(seconds):
- 分钟(minutes):
- 小时(hours):
这些特化版本简化了时间单位的表示,使得程序员无需手动指定 和 参数。
示例如下:
在这个例子中,我们定义了两个 对象,一个表示5秒,另一个表示200毫秒。然后,我们使用 将5秒转换为毫秒,并输出结果。
- 时钟(clock):表示一个可以测量时间的设备,提供了当前时间点(now)和时间点之间的差值(time_since_epoch)等方法。chrono库提供了三种时钟,分别是:
- 系统时钟(system_clock):表示当前系统范围的实时日历时钟,通常与系统的钟同步。它可以用于表示日期和时间,以及与其他系统交互。
- 稳定时钟(steady_clock):表示一个单调递增的时钟,不受系统时间的调整或修改影响。它可以用于测量时间间隔,以及实现定时器和延时等功能。
- 高分辨率时钟(high_resolution_clock):表示一个具有最高精度的时钟,通常是系统时钟或稳定时钟的别名(using high_resolution_clock = system_clock;)。它可以用于测量极短的时间间隔,以及实现性能分析等功能。
- now --成员函数,放回当前时钟的时间点
1) std::chrono::system_clock
它表示系统范围的实时时钟。这个时钟类提供了访问系统当前时间点的功能,并且允许将时间点转换为 类型(通常用于表示日历时间)以及进行时间点之间的算术运算。使用 可以获取当前的系统时间点,返回类型是 。
示例代码:
在这个例子中,我们获取了当前的系统时间点,并将其转换为 类型,然后格式化为人类可读的日期和时间格式输出。接着,我们创建了一个表示当前时间点之后10秒的新时间点,并同样进行了格式化输出。需要注意的是,这里的10秒后的时间计算是简单的秒数相加,并没有考虑诸如闰秒等复杂的时间调整情况。
2) std::chrono::steady_clock
它表示一个稳定的、单调递增的时钟。这个时钟类的主要特点是它不受系统时间调整(如用户手动更改系统时间)的影响,因此非常适合用于测量时间间隔,例如性能分析、计时器等场景。使用 可以获取当前的稳定时间点,返回类型是 。
示例如下:
在这个例子中,我们使用 来测量一个循环计算代码段的执行时间,并将结果转换为毫秒后输出。由于 的稳定性和单调性,我们可以确保测量得到的时间间隔是准确的。
3) std::chrono::steady_clock
它旨在提供一个具有最高可用精度的时钟。然而,需要注意的是, 并不总是代表实际的最高分辨率时钟,而是代表在当前实现中可用的最高分辨率时钟。换句话说,它的行为可能因编译器和平台而异。使用 可以获取当前的高精度时间点,返回类型是 。
示例如下:
在这个例子中,我们使用 来测量一个循环计算代码段的执行时间,并将结果转换为毫秒后输出(尽管我们实际上是以纳秒为单位测量的,但为了方便理解,我们将其转换为毫秒)。然而,需要注意的是,由于 的精度可能受到硬件和操作系统的限制,因此测量得到的时间可能会有一定的偏差。
- 时间点(time_point):表示一个特定时刻,由一个时钟和一个时间间隔组成。例如,表示系统时钟的当前时间点,表示稳定时钟的当前时间点,等等。chrono库还提供了一些常用的时间点别名,如,,等。
- time_since_epoch 返回到epoch的时间间隔Duration
- 日期类,用来对日期时间进行比较。
库提供了与时间相关的类型和函数,包括对类型的操作,以及转换时间和日期的函数。它使用类型来表示时间点,并提供了将时间转换为字符串的函数。
- 核心类型
- :用于表示从程序启动以来经过的CPU时间。
- :表示从Unix纪元(1970年1月1日00:00:00 UTC)以来的秒数。
- 结构:表示本地或格林威治标准时间的结构。
- 常用函数
- :获取当前时间,返回类型的值。
- :将类型的时间转换为本地时间结构。
- :将类型的时间转换为UTC时间结构。
- :将结构转换为字符串形式。
- :格式化时间。
- 常见用法
- 获取当前时间并转换为本地时间:
- 格式化输出时间:
请注意, 成员表示自1900年以来的年数,因此需要加上1900来得到实际的年份。同样地, 成员表示月份(从0开始计数),因此需要加上1来得到实际的月份。
std::chrono时间库在不同平台上都具备良好的兼容性,无论是Windows、Linux还是其他操作系统,都可以使用该库进行时间处理,使代码具备良好的可移植性。该库提供了丰富的时间单位和精度选项,适应不同场景下的时间计算需求。无论是秒、毫秒、微秒还是纳秒的时间单位,都可以很方便地应用于代码中。而且std::chrono时间库提供了不同类型的时钟,如系统时钟(system_clock)、稳定时钟(steady_clock)和高分辨率时钟(high_resolution_clock),可以根据具体需求选择合适的时钟类型。
进一步学习和参考C++ std::chrono时间库的推荐资源:
- 官方文档:可以查阅C++标准库的官方文档,其中包含了std::chrono时间库的详细说明和示例代码。官方文档可以帮助深入了解每个类、函数和成员的用法和语义。
- C++ Reference:C++ Reference是一个权威的C++参考网站,提供了std::chrono时间库的详细文档和示例代码。可以在该网站上查找特定类、函数或成员,并了解它们的用法和示例。
- 推荐书籍:《C++ Concurrency in Action: Practical Multithreading》和《Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14》。
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/jszy-gxgz/60747.html