在 C++ 中,std::chrono
库提供了用于日期和时间处理的强大工具。然而,std::chrono
本身专注于时间点(time_point
)和持续时间(duration
)的测量,而不直接处理日历日期和时钟时间的格式化输出。从 C++20 开始,我们可以使用 std::chrono
中的新特性来处理日期和时间的格式化输出,但在 C++20 之前,我们通常结合使用 std::chrono
和其他库,如 <ctime>
,来输出日期和时间。
以下是一个示例,展示如何在 C++11 中使用 std::chrono
和 <ctime>
来获取并输出当前日期和时间:
cpp#include <iostream> #include <chrono> #include <ctime> int main() { // 获取当前时间点 std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); // 转换为time_t以便我们可以转换为可读的格式 std::time_t now_time_t = std::chrono::system_clock::to_time_t(now); // 转换为本地时间 std::tm* now_tm = std::localtime(&now_time_t); // 输出当前日期和时间 std::cout << "Current date and time: " << 1900 + now_tm->tm_year << '-' // 年份 << 1 + now_tm->tm_mon << '-' // 月份 << now_tm->tm_mday << ' ' // 日 << now_tm->tm_hour << ':' // 小时 << now_tm->tm_min << ':' // 分钟 << now_tm->tm_sec << std::endl; // 秒 return 0; }
在这个例子中,我们首先使用 std::chrono::system_clock::now()
获取当前的时间点。然后,我们使用 std::chrono::system_clock::to_time_t()
将时间点转换为 time_t
类型,这种类型更容易转换为人类可读的格式。使用 std::localtime()
将 time_t
转换为 std::tm
结构,该结构包含日历日期和时间的详细分解。
输出示例如下:
shellCurrent date and time: 2023-9-24 14:35:22
这种方法结合了 std::chrono
的高精度时间点测量和传统 C 库的时间格式化功能。对于需要 C++20 的新特性,可以使用 std::format
来直接格式化 std::chrono
类型,这使得代码更简洁、直接。
2024年6月29日 12:07 回复