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 天
。