【cocos2dx】【c++】計算兩個日期相差幾天,在指定的天數彈出相應的彈窗
設備/引擎:Mac(11.6)/Mac Mini
開發工具:Xcode(15.0.1)
開發需求:計算兩個日期相差幾天,在指定的天數彈出相應的彈窗
新項目加了個Amazon產品跳轉的功能,需要再特定的幾天自動彈出給用戶看,問題倒不是什么特別棘手的問題,就是在做的時候發現了幾種簡單好用的方法,分享分享。
方法一:cocos中計算兩個時間戳間的差值進一步求出相差幾天
1.定義本地存儲字段,用來存儲初始日期
double preBookTime = CCUserDefault::sharedUserDefault()->getDoubleForKey("initDay",0.00);
一般會在用戶打開后,將初始日期修改并存儲起來,如下
CCUserDefault::sharedUserDefault()->setDoubleForKey("preJgsawBookTime",static_cast<double>(day));
其中的day就是獲取到的日期,并將其轉換為double類型,你可以每次打開都進行修改存儲,也可以只在第一次修改存儲,看具體的項目需求
2.計算兩個日期的差值
涉及到計算時間是一定會用到time_t類型,C++ 中,time_t 是用于表示時間的標準類型,一般獲取的值都是秒數,你可以從中獲取到年月日時分秒。
time_t preBookDay = static_cast<time_t>(preBookTime);
time_t day = this->getCurTime(); //獲取當前時間
time_t subDayTime = day-preBookDay;
要比較時間首先要保持類型一直,這里就用到了static_cast,來安全的將double類型轉換為time_t類型,static_cast 是一種顯式類型轉換運算符,用于在相關類型之間進行安全的轉換,還是很好用的;
第二行獲取當前時間,cocos有封裝好的方法直接調用即可,獲取當前日期代碼如下
struct cc_timeval now;
CCTime::gettimeofdayCocos2d(&now, NULL);
time_t timep = now.tv_sec;
返回值為秒數,方便比較使用
最后就是兩個日期的秒數形式相減得出差幾天。
3.將差值轉換為天數
1)使用localtime方法將time_t 類型轉換為tm結構,以便進一步獲取到其中的day
struct tm *tm;
tm = localtime(&subDayTime);
int curDay = tm->tm_mday;
這樣就能很快的到差了幾天
2)如果想不起來用localtime,你也可以直接將算出來的秒數轉換為天數,記得類型轉換
int curDay = static_cast<int>(subDayTime / (60 * 60 * 24));
這個更好理解了,用秒數除以一天的秒數即可得到天數。
至此,你就可以準確得出兩個日期相差的天數。
方法二:使用c標準庫中的difftime函數
difftime函數是一個強大且易于使用的工具,可以用來計算兩個時間點之間的差值。將兩個 time_t類型的值傳遞給該函數,可以方便地得到它們之間的秒數差,然后將秒數轉換你想要的值即可。也是很方便的。
獲取到初始日期跟當前日期,注意是time_t類型,跟上面獲取方法一致,不再贅述。獲取后直接調用即可
const int seconds_per_day = 60 * 60 * 24; //每天的秒數
int difference = std::difftime(time2, time1) / seconds_per_day; //秒數換算為天數
如上很簡單很實用。
注:記得引用ctime庫,如果你獲取當前日期用的tm類型,可以用mktime方法進行轉換,轉換為time_t類型
至此就是兩種方法的大致內容,還是很方便好用的。
希望能給大家帶來幫助!!!有什么問題需要討論的可以評論私信歡迎討論~