C ++ определяет, не было ли программное обеспечение открыто в тот же день (Windows)

Поэтому мне нужно выполнить некоторые действия, если программное обеспечение не было открыто в тот же день, и я планирую сохранить в моей базе данных количество дней с начала сегодняшней даты. Затем, когда программное обеспечение откроется, оно извлечет это количество дней с последней эпохи из БД и затем проверит это с сегодняшним числом дней с последней эпохи. Таким образом, я буду знать, если это тот же день или нет.

Я очень неопытен в C ++, и я искал функции DateTime из «stdafx.h», однако я не смог получить количество дней с последней эпохи.

Поэтому моя цель в этом заключается в том, чтобы очистить базу данных, если программное обеспечение было впервые открыто сегодня. Если он уже был открыт сегодня, просто продолжайте и ничего не делайте.

Я не знаю, как это сделать в C ++. Если бы это был Python или C # или Java, у меня не было бы проблем с этим. Итак, как мне поступить об этом в C ++?

1

Решение

+1 к ответ melak47. Я просто хотел добавить (и это не вписалось бы в комментарий), что его ответ предполагает дневные изменения в часовом поясе UTC, что может быть просто замечательно. Это очень хороший и эффективный ответ для многих приложений, включая стекпереполнение сам!

Но если вы хотите, чтобы смена дня произошла в местный полночь, вот библиотека это может помочь вам сделать это, в то же время придерживаясь <chrono> объекты. На самом деле, это всего лишь незначительная настройка ответ melak47:

#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, кроме случаев, когда для машины установлен местный часовой пояс, который отличается от UTC, и UTC в настоящее время уже на следующий день или все еще в предыдущий день по сравнению с местным часовым поясом.

3

Другие решения

С использованием <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, а затем снова через минуту, вы заметите, что прошел календарный день.

4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector