C++获取两个yyyy-MM-dd日期间的所有日期
时间: 2023-08-21 15:03:35 浏览: 174
c/c++获取系统时间
5星 · 资源好评率100%
可以使用 C++11 中的 `<chrono>` 头文件和 `<iomanip>` 头文件中的 `std::put_time` 函数来实现。
以下是一个获取两个日期间所有日期的示例代码:
```c++
#include <iostream>
#include <chrono>
#include <iomanip>
#include <vector>
using namespace std;
// 获取两个日期之间的所有日期
vector<string> getDatesBetween(const string& start, const string& end)
{
// 将起始日期和结束日期转换为时间点
auto startTime = chrono::system_clock::from_time_t(chrono::system_clock::to_time_t(chrono::system_clock::now()));
auto endTime = chrono::system_clock::from_time_t(chrono::system_clock::to_time_t(chrono::system_clock::now()));
stringstream ss(start);
ss >> get_time(&tm(), "%Y-%m-%d");
startTime = chrono::system_clock::from_time_t(mktime(&tm()));
ss.clear();
ss.str(end);
ss >> get_time(&tm(), "%Y-%m-%d");
endTime = chrono::system_clock::from_time_t(mktime(&tm()));
// 计算日期差
auto days = chrono::duration_cast<chrono::duration<int, ratio<86400>>>(endTime - startTime).count();
// 构造日期列表
vector<string> dates;
for (int i = 0; i <= days; i++) {
auto tp = startTime + chrono::hours(i * 24); // 逐天增加
auto t = chrono::system_clock::to_time_t(tp); // 转换为 time_t
auto tm = *localtime(&t); // 转换为 struct tm
stringstream ss;
ss << put_time(&tm, "%Y-%m-%d"); // 格式化日期
dates.push_back(ss.str());
}
return dates;
}
int main()
{
vector<string> dates = getDatesBetween("2022-01-01", "2022-01-07");
for (auto date : dates) {
cout << date << endl;
}
return 0;
}
```
该示例代码中的 `getDatesBetween` 函数接受两个字符串类型的日期参数,返回一个字符串类型的日期列表,其中包含了起始日期和结束日期之间的所有日期。
在函数中,首先将起始日期和结束日期转换为时间点,然后计算日期差,并逐天增加时间点,最后将时间点转换回日期并格式化为字符串存入列表中。
阅读全文