【cocos2dx】【c++】【游戲開發】舊題新說,計算兩個日期相差幾天,在指定的天數彈出相應的彈窗

【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類型

至此就是兩種方法的大致內容,還是很方便好用的。

希望能給大家帶來幫助!!!有什么問題需要討論的可以評論私信歡迎討論~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/38751.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38751.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/38751.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

中文翻譯老撾語只推薦一個神器《老撾語翻譯通》App,老撾語口語發音練習,支持老撾文OCR識別提取文字!

出國旅游去探索東南亞的神秘國家&#xff1a;老撾&#xff0c;不會老撾語怎么辦&#xff1f;不用怕&#xff0c;下載《老撾語翻譯通》App幫助你把中文翻譯成老撾語。 功能亮點&#xff1a; 實時翻譯&#xff1a;實時把中文翻譯成老撾語&#xff0c;老撾語單詞或者句子均可均可…

typescript學習回顧(三)

今天繼續來分享ts的相關概念&#xff0c;枚舉&#xff0c;ts模塊化&#xff0c;接口和類型兼容性 ts的擴展類型&#xff1a;類型別名&#xff0c;枚舉&#xff0c;接口和類 枚舉 基礎概念 枚舉通常用于約束某個變量的取值范圍。當然字面量和聯合類型配合使用&#xff0c;也可…

Redis 配置詳解

文章目錄 Redis 配置詳解網絡持久化復制安全客戶端內存管理延遲釋放僅追加模式LUA集群慢指令延遲監控事件通知高級配置主動碎片整理 Redis 配置詳解 網絡 ########################## NETWORK ########################## bind&#xff1a;指定 Redis 只接收來自于特定 IP 地…

Linux 高級編程——線程控制

線程控制&#xff1a;互斥與同步 概念&#xff1a; 互斥 》在多線程中對臨界資源的排他性訪問。 互斥機制 》互斥鎖 》保證臨界資源的 訪問控制。 pthread_mutex_t mutex; 互斥鎖類型 互斥鎖變量 內核對象 框架&#xff1a; 定義互斥鎖 》初始化鎖 》加…

前端——在本地搭建Vue單頁應用

目錄 1、安裝最新node.js 2、打開命令行窗口 3、進入要保存項目的目錄下 4、安裝 Vue CLI 5、創建新項目&#xff0c;選擇功能 5.1 新建項目 5.2 Please pick a preset 5.3 Check the features needed for your project 5.4 Choose a version of Vue.js 5.5 Use hist…

Android13 串口控制是能wifi adb實現

Android13 串口控制是能wifi adb實現 文章目錄 一、前言二、Android 串口控制是能wifi adb實現1、通過Settings屬性控制2、通過prop屬性控制3、wifi adb 對應的Settings屬性和prop屬性關系&#xff08;1&#xff09;屬性監聽&#xff08;2&#xff09;相關代碼位置&#xff08;…

優化數據庫字段使用位運算-php語言示例

背景&#xff1a;一個會員有三個狀態&#xff0c;A、B、C&#xff0c;其中一個人可以為 A、B、C、AB&#xff1b;之前數據表結構加了三個字段is_a、is_b、is_c; 本人實在不想這樣粗糙的實現需求&#xff0c;遂決定用位運算優化。 上代碼&#xff1a; 位運算可以用來處理狀態值…

探索SOLIDWORKS 2024設計增強功能

隨著技術的不斷進步和市場的日益競爭&#xff0c;工程設計和制造行業對于快捷、準確和創新的工具需求日益增長。SOLIDWORKS作為3D CAD設計軟件&#xff0c;一直致力于為用戶提供更強大、更便捷的設計工具。SOLIDWORKS 2024的發布&#xff0c;再次證明了其在設計增強功能方面的持…

使用 Amazon Bedrock Converse API 簡化大語言模型交互

本文將介紹如何使用 Amazon Bedrock 最新推出的 Converse API&#xff0c;來簡化與各種大型語言模型的交互。該 API 提供了一致的接口&#xff0c;可以無縫調用各種大型模型&#xff0c;從而消除了需要自己編寫復雜輔助功能函數的重復性工作。文中示例將展示它相比于以前針對每…

如何在Windows上使用Docker搭建PHP開發環境

前言 在本地搭建開發環境我好像沒幾年就要折騰一次&#xff0c;因為本地開發電腦使用的是windows&#xff0c;早些年的時候&#xff0c;用過很多類似WAMP之類的東西&#xff0c;但最終都有或多或少不滿意的地方&#xff0c;前兩年的時候&#xff0c;還折騰過WSL&#xff0c;但…

批量文件名修改軟件:一鍵解決同一編碼多型號文件分類與命名難題,高效管理文件

在數字化時代&#xff0c;圖片文件已經成為我們工作中不可或缺的一部分。然而&#xff0c;當面對成百上千個同一編碼下不同型號的圖片文件時&#xff0c;如何快速、準確地進行分類和命名&#xff0c;成為了許多職場人士頭疼的問題。現在&#xff0c;我們為您帶來了一款神奇的批…

MyBatisPlus 基礎數據表的增刪改查 入門 簡單查詢

MyBatisPlus MyBatisPlus&#xff08;簡稱MP&#xff09;是一個基于MyBatis的增強工具庫&#xff0c;簡化了MyBatis的開發&#xff0c;提供了很多實用的功能和特性&#xff0c;如自動生成SQL、通用CRUD操作、分頁插件、條件構造器、代碼生成器等。它不僅簡化了開發過程&#x…

2024海亮日記

寫在前面&#xff1a;長文預警 20240617 聽說要去海亮&#xff0c;不考&#xff08;補考&#xff09;期末考試&#xff0c;于是進行一個停課的辦理&#xff0c;第一次進入410&#xff0c;被逆天的配置和氣氛所震驚 發誓這回去HL一定要有好效果&#xff0c;于是制定了詳細的計…

golang 未指定類型interface{} 類型的 int類型數據json.Unmarshal 解碼后變成float64類型問題解決方法

golang內置的json反序列化方法&#xff0c;默認情況下對應 未指定類型interface{} 類型的的 int類型數據在經過Unmarshal解碼后 int類型的數據會變成 float64類型。 因為json里面默認將interface{}類型的int數據都當做float64來處理。 解決方法很簡單&#xff0c;就是使用自定…

優盤有盤符顯示0字節:故障解析與數據恢復策略

一、優盤有盤符顯示0字節現象描述 在使用優盤的過程中&#xff0c;我們有時會遇到一種令人困惑的情況&#xff1a;插入優盤后&#xff0c;電腦能正常識別到優盤的盤符&#xff0c;但當我們嘗試訪問其中的數據時&#xff0c;卻發現優盤的容量顯示為0字節&#xff0c;無法讀取或…

快速掌握MyBatis

MyBatis 是一個流行的 Java 持久層框架&#xff0c;它提供了一種半自動的 SQL 映射方式&#xff0c;使得開發者能夠更加靈活地編寫 SQL 語句&#xff0c;同時避免了傳統 JDBC 代碼的冗余和復雜性。下面進行簡要概述&#xff1a; MyBatis 快速掌握 核心概念&#xff1a;理解 My…

8.1 Firmware Update Process

8.1 Firmware Update Process 通過reset激活firmware 更新的過程&#xff1a; host發出firmare下載命令&#xff0c;將FW image下載到控制器。FW image可能有多個部分要下載&#xff0c;因此FW image 下載命令中指定正在下載的FW image的每個部分的偏移量。FW image 下載命令…

Sui創始團隊在競速環節中的快問快答

在Sui Basecamp活動期間&#xff0c;Sui區塊鏈的最初貢獻者在Oracle紅牛賽車模擬器上展示了他們的技術能力&#xff0c;在駕駛圈時回答了有關Sui的問題。 Evan Cheng&#xff08;又名Revvin’ Evan&#xff09;在解釋Mysticeti創下區塊鏈最終性記錄的同時保持著他的駕駛線路。…

Java | Leetcode Java題解之第200題島嶼數量

題目&#xff1a; 題解&#xff1a; class Solution {void dfs(char[][] grid, int r, int c) {int nr grid.length;int nc grid[0].length;if (r < 0 || c < 0 || r > nr || c > nc || grid[r][c] 0) {return;}grid[r][c] 0;dfs(grid, r - 1, c);dfs(grid, r…

go Channel原理 (三)

Channel 設計原理 不要通過共享內存的方式進行通信&#xff0c;而是應該通過通信的方式共享內存。 在主流編程語言中&#xff0c;多個線程傳遞數據的方式一般都是共享內存。 Go 可以使用共享內存加互斥鎖進行通信&#xff0c;同時也提供了一種不同的并發模型&#xff0c;即通…