从上次检查开始 C++ 天数

C++ days passed from last check

我想创建一个程序来跟踪用户上次给植物浇水的时间(手动检查)。所以基本上......用户按下一个按钮,程序将今天的日期设置为 date1,然后每天更新 date2。如果差异大于某个日期,程序 returns 一个字符串。

int main() {
  int time_elapsed = ; \???
  std::cout << needs_water(difference) << "\n";
  
}

这里是main函数,调用函数如下:

std::string needs_water(int days) {
  if (days > 3){
    return("Time to water the plant.");
  }
  else {
    return("Don't water the plant!");
  }
}

抱歉我的英语不好,在此先感谢。

编辑:简而言之,我想知道的是如何告诉程序从上次检查开始已经过去了多长时间。

根据我的理解,这是一个应该实现您想要实现的示例。将 milliseconds 替换为 days (c++20) 或 hours

#include <iostream>
#include <string>
#include <chrono>
#include <thread>

using namespace std::chrono;
using namespace std::chrono_literals;

template<typename DurationT>
bool time_elapsed(DurationT time) {
  static auto last_check = steady_clock::now();
  auto now = steady_clock::now();
  auto time_passed = now - last_check;
  if (time_passed > time){
    last_check = now;
    return true;
  }
  else {
    return false;
  }
}

int main()
{
    for(int i=0; i < 12; ++i) {
        std::cout << (time_elapsed(milliseconds{3}) ? 
            "Time to water the plant!" : 
            "Don't water the plant!") << std::endl;
        std::this_thread::sleep_for(1ms);
    }
    
    return 0;
}

https://coliru.stacked-crooked.com/a/9e3600759ed902c2

how to tell the program how much time elapsed from the last check.

要么你的程序一直运行宁。这样,您就可以将所有数据存储在程序内存中。

但是如果程序是要运行然后退出,那么你显然需要一个外部实体来存储状态。这通常是位于用户主目录下某个固定位置的简单文件。

例如,获取当前时间并将其以某种形式保存到文件中的固定位置。最简单的“形式”是几秒钟,因为......某个恒定的时间 - 通常是从 epoch 开始。然后在程序启动时,查看该文件是否存在,如果存在,则读取最后一次。然后获取自纪元以来的当前时间 - 文件中存储的值与当前时间之间的差异将是经过了多少时间。