【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.mzph.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;即通…