簡體   English   中英

使用生成日期向量<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向量。 我們將從時間0開始,然后將持續20天,直到時間19,為我們計算的每一天添加一個新的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 / %y\n", &tim);
    puts(buffer);
  }


  return 0;
}

請注意,for循環以一天中的秒數遞增。 可能可以直接使用struct tmstruct tm *變量執行此操作,但隨后會有很多追逐指針的操作。 鑒於將其轉換為time_t非常容易,因此值得使用它代替它來避免麻煩。

希望這會有所幫助-在處理時間時,C ++顯然還有點不足。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM