Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
DateUpdate.cpp
#include <stdio.h>
#include <string.h>
#include <string>
#include <iostream>
#include <fstream>
#include <time.h>
using namespace std;
long getCurrentTime(); //現在時刻を取得
void showDateLogByLong(const long &time, const string &str); //デバック時刻表示
bool isDailyFirstLogin(long currentTime); //毎日の最初のログイン状態確認
void writeLastLoginTime(const long currentTime); //ログイン時間の書き込み
long readLastLoginTime(); //過去のログイン時間の読み込み
string FILE_NAME = "LastLoginTime.txt";
int main()
{
long currentTime = getCurrentTime();
if(isDailyFirstLogin(currentTime))
{
cout << "更新する" << endl;
writeLastLoginTime(currentTime);
} else {
cout << "更新しない" << endl;
}
return 0;
}
//毎日の最初のログイン状態確認
//更新日時よりも過去にログインしていたら trueを返す
bool isDailyFirstLogin(long currentTime)
{
const long updateSec = 21600; //example: 06:00 → 6 * 3600 = 21600
const long lastLoginTime = readLastLoginTime();
showDateLogByLong(currentTime, "現在時刻の表示");
showDateLogByLong(lastLoginTime, "最後にガチャを行った時刻");
//最新(今日 or 昨日)の年月日入りの更新時刻を求めるため現在時刻を減算
currentTime -= updateSec;
//年月日未満の値を初期化
struct tm *currentDate = localtime(&currentTime);
currentDate->tm_hour = 0;
currentDate->tm_min = 0;
currentDate->tm_sec = 0;
//年月日入り更新時刻を作成
const long updateTime = mktime(currentDate) + updateSec;
showDateLogByLong(updateTime, "年月日入り更新時刻");
return lastLoginTime < updateTime;
}
//デバック時刻表示
void showDateLogByLong(const long &time, const std::string &str)
{
struct tm *timeTm = localtime(&time);
char *date = asctime(timeTm);
date[(int)strlen(date) - 1] = '\0';
printf("%s %s\n", date, str.c_str());
}
//現在時刻を取得
long getCurrentTime()
{
time_t now = time(NULL);
struct tm *nowDate = localtime(&now);
return mktime(nowDate);
}
//ログイン時間の書き込み
void writeLastLoginTime(const long currentTime)
{
ofstream ofs;
ofs.open(FILE_NAME, ios::out|ios::binary|ios::trunc);
if (!ofs) {
cout << "書き込み失敗 ファイル " << FILE_NAME << " が開けません。終了します。" << endl;
exit(0);
}
ofs << currentTime << std::endl;
ofs.close();
}
//過去のログイン時間の読み込み
long readLastLoginTime()
{
ifstream ifs( FILE_NAME, ios::in | ios::binary );
if (!ifs){
cout << "読み込み失敗 ファイル " << FILE_NAME << " が開けません。 0を返します。" << endl;
return 0;
}
std::string str;
ifs >> str;
long readLast = stol(str);
ifs.close();
return readLast;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment