时间处理chrono
时间处理chrono
[TOC]
chrono
C++ 标准库提供了 <chrono> 头文件,用于处理时间相关的操作。这个头文件引入了一组用于处理时间的类和函数,是 C++11 标准引入的一个重要组成部分。
<chrono> 头文件的核心是 std::chrono 命名空间,其中定义了各种类型和函数,用于表示时间点、时间间隔和时钟,以及执行时间相关的操作。以下是 <chrono> 中一些重要的类和类型:
- 时间点(Time Point):表示某个特定时刻的类,可以是绝对时间(例如 Unix 时间戳)或相对时间(例如从程序开始运行的时间)。常见的时间点类型包括
std::chrono::system_clock::time_point、std::chrono::steady_clock::time_point和std::chrono::high_resolution_clock::time_point。 - 时间间隔(Duration):表示一段时间的类,可以是以秒、毫秒、微秒等单位的时间长度。常见的时间间隔类型包括
std::chrono::duration和其特化版本,例如std::chrono::seconds、std::chrono::milliseconds、std::chrono::microseconds等。 - 时钟(Clock):定义了时间的基准,用于测量时间点和计算时间间隔。常见的时钟类型包括
std::chrono::system_clock(系统时钟,通常表示当前时间)、std::chrono::steady_clock(稳定时钟,适用于计时器和间隔计算)和std::chrono::high_resolution_clock(高精度时钟,提供更高的精度和分辨率)。 - 时钟周期(Clock Period):时钟周期指定了时钟的最小计数单位,通常以纳秒、微秒或毫秒为单位。
<chrono> 提供了一组功能强大的工具,用于处理时间点之间的算术运算、时间间隔的计算、时间的格式化和解析等操作。它是 C++ 中处理时间的推荐方式,具有类型安全性、可移植性和灵活性等优点,可以方便地处理复杂的时间操作需求。
在C++中,与日期和时间相关的操作通常使用标准库 <chrono> 进行处理。以下是一个简单的示例,演示了如何使用 <chrono> 来获取当前日期和时间,并进行一些基本的操作:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <chrono>
#include <ctime>
int main() {
// 获取当前时间点
auto now = std::chrono::system_clock::now();
// 转换为时间戳(秒为单位)
std::time_t now_c = std::chrono::system_clock::to_time_t(now);
// 输出当前时间
std::cout << "Current time: " << std::ctime(&now_c);
// 获取当前日期和时间的年、月、日、时、分、秒
std::tm* ptm = std::localtime(&now_c);
int year = ptm->tm_year + 1900; // 年份需要加上 1900
int month = ptm->tm_mon + 1; // 月份从 0 开始
int day = ptm->tm_mday;
int hour = ptm->tm_hour;
int minute = ptm->tm_min;
int second = ptm->tm_sec;
// 输出年、月、日、时、分、秒
std::cout << "Year: " << year << std::endl;
std::cout << "Month: " << month << std::endl;
std::cout << "Day: " << day << std::endl;
std::cout << "Hour: " << hour << std::endl;
std::cout << "Minute: " << minute << std::endl;
std::cout << "Second: " << second << std::endl;
// 构造日期对象
std::chrono::year_month_day date = std::chrono::year_month_day{std::chrono::floor<std::chrono::days>(now)};
// 输出年、月、日
std::cout << "Year: " << date.year() << std::endl;
std::cout << "Month: " << unsigned(date.month()) << std::endl;
std::cout << "Day: " << date.day() << std::endl;
return 0;
}
此示例中,首先使用 std::chrono::system_clock::now() 获取当前时间点,然后通过 std::chrono::system_clock::to_time_t() 将时间点转换为 std::time_t 类型,以便使用标准库函数 std::ctime() 输出时间字符串。
接着,使用 std::localtime() 将 std::time_t 转换为 std::tm 结构体,以获取年、月、日、时、分、秒等时间信息。注意,月份和小时都需要进行适当的调整。
最后,使用 std::chrono::year_month_day 构造了一个日期对象,并输出了其年、月、日信息。
参考12
-
来源:ChatGpt ↩︎
本文由作者按照
CC BY 4.0
进行授权