在某个日期执行代码?

时间:2016-07-08 06:12:49

标签: c++ date time

基本上,我想创建一个程序来检查月,日和年,并且如果满足月和日标准,将执行代码。

例如,我们假设日期是2016年7月8日。

让我们说我有一些代码只是希望程序输出" Hello world!"在这个日期。

我希望此代码在2016年7月8日执行,而不是其他日期。我该怎么做呢?

2 个答案:

答案 0 :(得分:2)

要在某个时间运行您的程序,您必须依赖外部工具,例如cron或Windows任务计划程序。如果程序尚未运行,则程序无法自行运行: - )

如果您的代码 正在运行,并且您只是希望它在某个特定时间之前延迟操作,那就是ctime标头中的所有内容都是为了。

您可以使用time()localtime()将当地时间转换为struct tm,然后检查字段以检查某个特定时间是否是最新的。如果是这样,请采取行动。如果没有,请循环并再试一次(如果需要,可以适当延迟)。

举例来说,这是一个输出时间但仅限于五秒边界的程序:

#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;

int main() {
    time_t now;
    struct tm *tstr;

    // Ensure first one is printed.

    int lastSec = -99;

    // Loop until time call fails, hopefully forever.

    while ((now = time(0)) != (time_t)-1) {
        // Get the local time into a structire.

        tstr = localtime(&now);

        // Print, store seconds if changed and multiple of five.

        if ((lastSec != tstr->tm_sec) && ((tstr->tm_sec % 5) == 0)) {
            cout << asctime(tstr);
            lastSec = tstr->tm_sec;
        }
    }

    return 0;
}

答案 1 :(得分:1)

我会使用std::this_thread::sleep_until(time_to_execute);,其中time_to_executestd::chrono::system_clock::time_point

现在问题变成:如何将system_clock::time_point设置为正确的值?

Here is a free, open-source library可以轻松地将system_clock::time_point设置为特定日期。使用它看起来像:

using namespace date;
std::this_thread::sleep_until(sys_days{jul/8/2016});

这将在2016-07-08 00:00:00 UTC触发。如果您希望根据当地时间或某个任意时区触发here is a companion library来实现此目的。

您还可以下拉到C API并设置std::tm的字段值,将其转换为time_t,然后将其转换为system_clock::time_point。它更加丑陋,更容易出错,并且不需要第三方库。