C++ 日期 & 时间学习笔记

在C++中,日期和时间是非常重要的概念。它们可以被用来计算时间间隔,计算日期之间的差值,以及格式化日期和时间来满足各种需求。

日期

在C++中,日期可以使用std::chrono::system_clock::now()获取当前时间,并通过std::chrono::time_point类进行表示。

cppCopy Code
#include <iostream> #include <chrono> int main() { auto now = std::chrono::system_clock::now(); std::time_t time = std::chrono::system_clock::to_time_t(now); std::cout << "当前时间为:" << std::ctime(&time) << std::endl; return 0; }

上面这段代码将输出当前时间,例如:

Copy Code
当前时间为:Tue Jun 01 09:47:03 2023

我们可以通过std::chrono::duration类来计算时间间隔:

cppCopy Code
#include <iostream> #include <chrono> int main() { auto start = std::chrono::system_clock::now(); // 做一些事情 auto end = std::chrono::system_clock::now(); std::chrono::duration<double> diff = end - start; std::cout << "经过了 " << diff.count() << " 秒" << std::endl; return 0; }

上面这段代码将输出经过的秒数,例如:

Copy Code
经过了 0.005s

时间

在C++中,时间可以通过使用<ctime>头文件中的函数来获取。其中,std::time_t类被用来表示时间,而std::tm结构体则被用来表示日期和时间的各个部分。

cppCopy Code
#include <iostream> #include <ctime> int main() { std::time_t now = std::time(nullptr); std::tm *ltm = std::localtime(&now); std::cout << "年份:" << 1900 + ltm->tm_year << std::endl; std::cout << "月份:" << 1 + ltm->tm_mon<< std::endl; std::cout << "日期:" << ltm->tm_mday << std::endl; std::cout << "小时:" << ltm->tm_hour << std::endl; std::cout << "分钟:" << ltm->tm_min << std::endl; std::cout << "秒数:" << ltm->tm_sec << std::endl; return 0; }

上面这段代码将输出当前时间的各个部分,例如:

Copy Code
年份:2023 月份:6 日期:1 小时:9 分钟:47 秒数:3

我们还可以使用strftime函数来格式化日期和时间:

cppCopy Code
#include <iostream> #include <ctime> int main() { std::time_t now = std::time(nullptr); char buffer[80]; std::strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", std::localtime(&now)); std::cout << "当前时间为:" << buffer << std::endl; return 0; }

上面这段代码将输出格式化后的当前时间,例如:

Copy Code
当前时间为:2023-06-01 09:47:03

示例

以下是一个计算两个日期之间的差值(以天为单位)的示例代码:

cppCopy Code
#include <iostream> #include <chrono> int main() { std::tm start = {0}; start.tm_year = 122; // 2022 start.tm_mon = 5; // June start.tm_mday = 1; std::tm end = {0}; end.tm_year = 123; // 2023 end.tm_mon = 5; // June end.tm_mday = 1; std::time_t start_time = std::mktime(&start); std::time_t end_time = std::mktime(&end); std::chrono::duration<double> diff = std::difftime(end_time, start_time); int days = diff.count() / 86400; std::cout << "2022年6月1日与2023年6月1日相差 " << days << " 天" << std::endl; return 0; }

上面这段代码将输出:2022年6月1日与2023年6月1日相差 365 天