因此,如果我的计划是在我的数据库中存储今天的纪元以来的天数,那么我需要做一些操作。然后,当软件打开时,它将从数据库的最后一个时期开始拉这个天数,然后检查自上一个纪元以来的今天的天数。因此,我将知道这是否是同一天。
我对C ++缺乏经验,而且我一直在查看“stdafx.h”中的DateTime函数,但是我无法获得自上一纪元以来的天数。
所以我这样做的目的是清除数据库,如果这是今天软件第一次打开的话。如果它今天已经打开,那么继续,什么也不做。
我不知道如何在C ++中解决这个问题。如果它是python或C#或java,我会毫不费力。那我怎么用C ++来解决这个问题呢?
答案 0 :(得分:4)
使用<chrono>
标准标题,可以很容易地获得自时钟时代以来的天数。
例如:
#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";
}
我认为实施可以随意使用任何时代,但如果您只关心连续通话天数的差异,那么您应该没问题。
请注意,由于我们基本上已经完成了一天的开始, 如果您的用户在23:59打开您的应用程序一次,然后在一分钟后再次打开您的应用程序,您将感觉到已经过了一个日历日。
答案 1 :(得分:3)
+1到melak47's answer。我只是想添加(并且这不适合评论),他的答案假定UTC时区的日期变化,这可能就好了。对于许多应用程序来说,这是一个非常好的和有效的答案,包括堆栈溢出本身!
但是如果您希望在本地午夜进行日期更改,here is a library可以帮助您做到这一点,同时仍然坚持使用漂亮的<chrono>
设施。事实上,这只是melak47's answer的一个非常小的调整:
#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";
}
它将给出与melak47's answer完全相同的答案,除非将机器设置为与UTC不同的本地时区,并且UTC当前已经进入第二天,或者仍然在前一天进行比较到当地时区。