【cocos2dx】【c++】【游戏开发】旧题新说,计算两个日期相差几天,在指定的天数弹出相应的弹窗

36 篇文章 0 订阅
4 篇文章 0 订阅

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

至此就是两种方法的大致内容,还是很方便好用的。

希望能给大家带来帮助!!!有什么问题需要讨论的可以评论私信欢迎讨论~

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GameTomato

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值