生成日期向量使用<ctime>
Generate a date vector using <ctime>
如何使用库构建一个包含两个给定日期之间所有日期(每日周期<ctime>
向量? 例如,给定 2019 年 1 月 1 日和 2019 年 1 月 10 日,包含介于两者之间的 10 个日期(含)的向量?
我真的不介意日期的表示,可以是字符串或任何其他结构,但我想了解如何操作<ctime>
对象。
如果在C++中有一个更好的时间表示库,我会很高兴听到它。
使用 C++20 日期库(又名 Howard Hinnant 的日期库):
#include "date.h"
auto get_dates(date::sys_days first, date::sys_days last)
{
std::vector<date::sys_days> dates;
for (; first <= last; first += date::days{1})
dates.push_back(first);
return dates;
}
(现场演示)
这是一个小型的快速演示程序 - 它制作一个struct tm
向量,然后打印超时。矢量的每个新条目都比旧条目早一天,在经过它们时无缝地环绕数月和数年。
时间通常存储在一个time_t
中,这是自y2k以来的秒数。这种数据类型似乎比struct tm
更容易操作 - 我们将使用它,再加上一天中的秒数,随时创建struct tm
向量。我们将从 time0 开始,然后继续 20 天到 time19,为我们计算的每一天添加一个新struct tm
。
#include <iostream>
#include <ctime>
#include <vector>
int main(void) {
double secs_in_a_day = 86400;
time_t time0; //your start time here
time(&time0); //i'm using the current time
//20 days later
time_t time19 = time0 + (20 * secs_in_a_day); //your end time here
std::vector<struct tm > timevec;
for(time_t i = time0; i <= time19; i += secs_in_a_day) {
struct tm t = *(gmtime(&i));
std::cout << i << "n";
timevec.push_back(t);
}
char buffer[80];
for(struct tm tim : timevec) {
strftime(buffer, 80, "Time: %d / %m / %yn", &tim);
puts(buffer);
}
return 0;
}
请注意,for 循环按一天中的秒数递增。可能可以直接使用struct tm
或struct tm *
变量来执行此操作,但是接下来会有很多追逐指针。鉴于它很容易转换为time_t
,使用它可能值得省去头痛。
希望这有所帮助 - 诚然C++处理时间时还有一些不足之处。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 如何使用 CTIME/Chrono Libarey 将开始时间与系统时钟进行比较
- 如何使用Chrono或ctime libaray输入设置的开始和结束时间
- 如何显式调用运算符<<
- 如何比较两个tm(来自ctime)变量
- 使用 ctime 保存新时间点会覆盖旧字符串?
- C++ ctime() 迄今为止格式化的字符串?
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- 生成日期向量使用<ctime>
- ctime 包含 boost::文件系统时出错
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 为什么STD :: MAP需要操作员&lt;以及我如何写一个
- 为什么“操作员”需要const但不是为“运营商&lt;”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败