C++ 日期 & 时间
在C++中,日期和时间是一个非常重要的领域。为了处理日期和时间,我们可以使用C++标准库中的<chrono>、<date>、<time>和<locale>等多个头文件。本篇文章将详细介绍如何使用这些头文件来实现日期和时间的操作,包括格式化、计算、比较等。
首先,我们来看如何使用<chrono>库来处理时间。<chrono>库提供了一种以统一的方式处理不同类型的定时器的方式。它包含了一些类,如chrono::system_clock、chrono::high_resolution_clock和chrono::posix_time等。
以下是一个简单的示例,展示了如何使用<chrono>库来获取当前时间:
#include <iostream>#include <chrono>#include <ctime>int main() { // 获取当前时间 auto current_time = std::chrono::system_clock::now(); // 将当前时间转换为时间戳(以秒为单位) auto timestamp = std::chrono::duration_cast<std::chrono::seconds>(current_time).count(); // 将时间戳转换为字符串 std::time_t time_t_object = timestamp; std::stringstream ss; ss << std::put_time(std::localtime(&time_t_object), "%Y-%m-%d %H:%M:%S"); // 输出当前时间 std::cout << "当前时间:" << ss.str() << std::endl; return 0;}
接下来,我们来看如何处理日期。在C++中,<date>库提供了一种简单的方式来处理日期。date类可以进行日期的加减运算,以及日期之间的比较等操作。
以下是一个简单的示例,展示了如何使用<date>库来处理日期:
#include <iostream>#include <chrono>#include <date>int main() { // 创建两个日期对象 std::date<std::chrono::year, std::chrono::month, std::chrono::day> date1(2021, 1, 1); std::date<std::chrono::year, std::chrono::month, std::chrono::day> date2(2021, 12, 31); // 计算两个日期之间的天数 std::chrono::days days_between = date2 - date1; std::cout << "两个日期之间的天数:" << days_between.count() << std::endl; // 计算两个日期之间的差值(以周为单位) std::chrono::weeks weeks_between = date2 - date1; std::cout << "两个日期之间的周数:" << weeks_between.count() << std::endl; // 比较两个日期 if (date1 <= date2) { std::cout << "date1 ≤ date2" << std::endl; } else { std::cout << "date1 > date2" << std::endl; } return 0;}
然后,我们来看如何处理字符串形式的日期。<locale>库提供了一种处理本地化字符串的方式。在本例中,我们将使用std::put_time函数将日期字符串转换为<date>对象。
以下是一个简单的示例,展示了如何使用<locale>库来处理字符串日期:
#include <iostream>#include <chrono>#include <date>#include <locale>#include <codecvt>int main() { // 输入日期字符串 std::wstring date_str = L"2021-12-31"; // 创建一个指向日期字符串的宽字符指针 wchar_t* date_ptr = date_str.data(); // 创建一个日期对象 std::wistringstream iss(date_ptr); std::date<std::chrono::year, std::chrono::month, std::chrono::day> date; iss >> date