C++ 日期 & 时间
C++ 是一种广泛使用的编程语言,它提供了强大的功能来处理日期和时间。在 C++ 中,日期和时间的处理主要依赖于 <chrono>
和 <ctime>
头文件。这两个头文件提供了不同的类和函数,用于执行各种日期和时间相关的操作,例如获取当前时间、计算时间差、格式化日期等。
1. 使用 <chrono>
头文件
<chrono>
头文件是 C++11 中引入的,它提供了高精度的时间测量和处理功能。这个头文件定义了三种主要类型:duration
、time_point
和 clocks
。
1.1. duration
duration
是一个模板类,用于表示时间间隔。它有一个模板参数,表示时间单位。例如,std::chrono::seconds
表示秒,std::chrono::milliseconds
表示毫秒。
#include <iostream>
#include <chrono>
int main() {
std::chrono::seconds duration(10);
std::cout << "Duration: " << duration.count() << " seconds" << std::endl;
return 0;
}
1.2. time_point
time_point
是一个模板类,用于表示时间点。它有一个模板参数,表示时间单位。例如,std::chrono::system_clock::time_point
表示系统时钟的时间点。
#include <iostream>
#include <chrono>
#include <ctime>
int main() {
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
std::time_t now_c = std::chrono::system_clock::to_time_t(now - std::chrono::hours(24));
std::cout << "Yesterday's date: " << std::ctime(&now_c) << std::endl;
return 0;
}
1.3. clocks
C++11 提供了三种时钟:system_clock
、steady_clock
和 high_resolution_clock
。
system_clock
:表示系统时钟,可以用来获取当前时间。steady_clock
:表示稳定时钟,它保证每次调用now()
返回的值是递增的。high_resolution_clock
:表示高分辨率时钟,它提供最小的时间单位。
#include <iostream>
#include <chrono>
int main() {
std::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();
// ... do some work ...
std::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> duration = t2 - t1;
std::cout << "Elapsed time: " << duration.count() << " seconds" << std::endl;
return 0;
}
2. 使用 <ctime>
头文件
<ctime>
头文件是 C++ 早期版本中用于处理日期和时间的。它提供了一些结构体和函数,例如 time_t
、tm
和 asctime
。
2.1. time_t
time_t
是一个用于表示时间的算术类型。它通常以自 Unix 纪元(1970 年 1 月 1 日)以来的秒数来表示时间。
#include <iostream>
#include <ctime>
int main() {
time_t now = time(0);
std::cout << "Current time: " << now << std::endl;
return 0;
}
2.2. tm
tm
结构体用于存储日期和时间信息。它包含年、月、日、小时、分钟、秒等信息。
#include <iostream>
#include <ctime>
int main() {
time_t now = time(0);
tm *ltm = localtime(&now);
std::cout << "Year: " << 1900 + ltm->tm_year << std::endl;
std::cout << "Month: " << 1 + ltm->tm_mon << std::endl;
std::cout << "Day: " << ltm->tm_mday << std::endl;
return 0;
}
2.3. asctime
asctime
函数用于将 tm
结构体转换为字符串表示的日期和时间。
#include <iostream>
#include <ctime>
int main() {
time_t now = time(0);
std::cout << "Current time: " << asctime(localtime(&now)) << std::endl;
return 0;
}
总结
C++ 提供了多种方式来处理日期和时间,包括使用 <chrono>
和 <ctime>
头文件。<chrono>
头