C++判断当天软件是否未打开(Windows)

C++ determine if the software has not been opened on the same day (Windows)

所以如果软件没有在同一天打开,我需要做一些操作我的计划是在我的数据库中存储今天日期从纪元开始的天数。然后,当软件打开时,它将从数据库中提取自上次纪元以来的天数,然后将其与自上次纪元以来的今天天数进行核对。这样我就知道是不是同一天了

我对 C++ 非常缺乏经验,我一直在查看 "stdafx.h" 的 DateTime 函数,但是我无法获得自上一个纪元以来的天数。

因此,如果这是今天第一次打开该软件,我这样做的目标是清除数据库。如果今天已经开通了,那就继续,什么都不做。

我不知道如何在 C++ 中处理这个问题。如果它是 python 或 C# 或 java 我不会有任何问题。那么我将如何在 C++ 中解决这个问题?

使用<chrono>标准header,很容易得到时钟纪元以来的天数。 例如:

#include <chrono>
#include <iostream>

int main() {
    using days = std::chrono::duration<int, std::ratio<24 * 60 * 60>>;

    auto days_since_epoch = std::chrono::duration_cast<days>(std::chrono::system_clock::now().time_since_epoch());

    std::cout << days_since_epoch.count() << "\n";
}

我认为实现可以自由使用任何epoch,但如果你只关心连续调用天数的差异,你应该没问题。

请注意,由于我们基本上是四舍五入到他们一天的开始, 如果您的用户在 23:59 打开您的应用程序一次,然后在一分钟后再次打开,您会认为一个日历日已经过去。

+1 至 。我只是想补充(这不适合发表评论),他的回答假设 UTC 时区的日期发生变化,这可能没问题。对于许多应用程序来说,这是一个非常好的和有效的答案,包括 stackoverflow 本身!

但如果您希望在 当地 午夜更改日期,这里有一个图书馆 可以帮助您做到这一点,同时仍然坚持使用不错的 <chrono> 设施。事实上,这只是对 :

的一个非常小的调整
#include "tz.h"
#include <chrono>
#include <iostream>

int
main()
{
    using namespace std::chrono;
    using namespace date;

    auto tp = system_clock::now();
    auto lp = current_zone()->to_local(tp);
    auto days_since_epoch = duration_cast<days>(lp.time_since_epoch());
    std::cout << days_since_epoch.count() << "\n";
}

它将给出与完全相同的答案,除非机器设置为与UTC不同的本地时区,并且UTC当前已经进入第二天,或者仍在前一天, 与当地时区相比。