2023年11月6日,周一上午
简介system_clock
system_clock::time_point
是 C++ 标准库中的一个类,用于表示时间点。它是一个模板类,根据不同的时钟类型,可以表示不同精度的时间点。system_clock
是其中一种时钟类型,它表示系统范围的实时时钟。
除了 system_clock
,C++ 标准库还提供了其他几种时钟类型。每种时钟类型都具有不同的特性和用途。以下是一些常见的时钟类型:
steady_clock
:这是一个单调递增的时钟,不受系统时间调整的影响。它主要用于计算时间间隔和测量程序的运行时间。high_resolution_clock
:这是一个高分辨率时钟,提供更高精度的计时。它可能是system_clock
或steady_clock
的别名,具体取决于实现。
这些时钟类型都属于 std::chrono
命名空间,可以通过以下方式访问:
#include <chrono>
std::chrono::system_clock
std::chrono::steady_clock
std::chrono::high_resolution_clock
system_clock::time_point
类的主要用途是记录或表示特定时间点,例如程序的启动时间、事件发生的时间等。它可以与其他时间点进行比较、计算时间间隔,以及进行时间点的转换。
通过使用 system_clock::time_point
,我们可以获取当前的系统时间,进行时间的记录和跟踪,并在需要时对时间进行操作和计算。在程序中,它通常与其他时间类型(如 duration
)一起使用,以便进行时间的测量、计算和处理。
值得注意的是,system_clock::time_point
表示的时间点通常以系统时钟为基准,因此可能会受到系统时间的调整和时钟漂移的影响。
获取系统时间并转换成时间戳和常用时间格式
#include<chrono>
#include<iostream>
#include <iomanip>
int main(){
//获取系统当前时间点
std::chrono::system_clock::time_point time_point=std::chrono::system_clock::now();
//把时间点转换成时间戳
std::time_t timestamp=std::chrono::system_clock::to_time_t(time_point);
//输出时间戳
std::cout<<"Current timestamp: "<<timestamp<<std::endl;
// 将时间戳转换为 tm 结构体
std::tm* timeinfo = std::localtime(×tamp);
// 使用 std::put_time 函数将时间格式化为字符串
std::cout << "Current time: " << std::put_time(timeinfo, "%Y-%m-%d %H:%M:%S") << std::endl;
}
进行时间点的比较
#include<chrono>
#include<iostream>
int main(){
std::chrono::system_clock::time_point time_point001,time_point002;
time_point001=std::chrono::system_clock::now();
//如果a的值太小,会出现错误的比较结果
int a=1000000000;
for(int i=0;i<a;i++){
;
}
time_point002=std::chrono::system_clock::now();
if(time_point001<time_point002){
std::cout<<"time_point001 first";
}
else{
std::cout<<"time_point002 first";
}
}
计算时间间隔
#include <iostream>
#include <chrono>
int main() {
std::chrono::system_clock::time_point start, end;
// 记录起始时间点
start = std::chrono::system_clock::now();
// 模拟一些操作
for (int i = 0; i < 100000000; i++) {
// do something
}
// 记录结束时间点
end = std::chrono::system_clock::now();
// 计算时间间隔
std::chrono::duration<double> elapsed_seconds = end - start;
// 将时间间隔转换为毫秒
double elapsed_ms = elapsed_seconds.count() * 1000;
// 输出结果
std::cout << "Elapsed time: " << elapsed_ms << " ms" << std::endl;
return 0;
}