前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java-游戏中的非零点做重置的场景下的工具函数(获取下次重置时间戳)

java-游戏中的非零点做重置的场景下的工具函数(获取下次重置时间戳)

原创
作者头像
cg错过
修改2020-11-13 18:18:42
5000
修改2020-11-13 18:18:42
举报
文章被收录于专栏:程序笔记
前言:

在程序员中, 经常会涉及到过零点重置玩家数据, 我目前做游戏开发, 刚好遇到个防沉迷的功能模块, 涉及到累计时间的判断. 如果重置时间是零点就可以直接吊底层库, 而目前游戏设定是凌晨4点重置玩家数据, 所以就会涉及到判断是否是同一天, 获取下次重置的问题.

虽说都是小的简单问题, 估计大部分写一写就出来了, 所以我这边文章也还是笔记, 就当是写过的工具代码记一下

自定义重置时间, 获取几天后(下几次)的重置时间

代码如下

代码语言:javascript
复制
public static int getHour(Calendar calendar) {
	return calendar.get(Calendar.HOUR_OF_DAY);
}

public static long getFutureResetMills(long mills, int resetHour){
	return getFutureResetMills(mills, resetHour, 1);
}

/**
 * 自定义重置时间, 获取几天后的重置时间
 * 示例
 * day: 1 : curMills: 1605081716747(2020-11-11 16:01:56), mills: 1605124800000(2020-11-12 04:00:00)
 * day: 1 : curMills: 1605034209000(2020-11-11 02:50:09), mills: 1605038400000(2020-11-11 04:00:00)
 * day: 1 : curMills: 1605024000000(2020-11-11 00:00:00), mills: 1605038400000(2020-11-11 04:00:00)
 * day: 1 : curMills: 1605023940000(2020-11-10 23:59:00), mills: 1605038400000(2020-11-11 04:00:00)
 * day: 1 : curMills: 1605038340000(2020-11-11 03:59:00), mills: 1605038400000(2020-11-11 04:00:00)
 *
 * @param mills     当前时间
 * @param resetHour 设定的重置的小时(24h), 默认4点
 * @param day       天数, 次数, 默认就下次
 * @return long mills
 */
public static long getFutureResetMills(long mills, int resetHour, int day) {
	Calendar calendar = Calendar.getInstance();
	Date date = new Date();
	if (mills > 0) {
		date.setTime(mills);
	}
	calendar.setTime(date);
	int curHour = getHour(calendar);
	if (curHour >= resetHour) {
		calendar.add(Calendar.DAY_OF_YEAR, day);
	}
	calendar.set(Calendar.HOUR_OF_DAY, resetHour);
	calendar.set(Calendar.MINUTE, 0);
	calendar.set(Calendar.SECOND, 0);
	calendar.set(Calendar.MILLISECOND, 0);
	return calendar.getTimeInMillis();
}

获取下次重置的时间戳

其实就是上面的

代码语言:javascript
复制
public static long getFutureResetMills(long mills, int resetHour){
	return getFutureResetMills(mills, resetHour, 1);
}

当然也可以套个别的名字

代码语言:javascript
复制
/**
 * 自定义重置时间,来获取下一次的重置时间戳
 * <p>
 * 例如
 * curMills: 1605079957880(2020-11-11 15:32:37), mills: 1605124800000(2020-11-12 04:00:00)
 * curMills: 1605034209000(2020-11-11 02:50:09), mills: 1605038400000(2020-11-11 04:00:00)
 * curMills: 1605024000000(2020-11-11 00:00:00), mills: 1605038400000(2020-11-11 04:00:00)
 * curMills: 1605023940000(2020-11-10 23:59:00), mills: 1605038400000(2020-11-11 04:00:00)
 * curMills: 1605038340000(2020-11-11 03:59:00), mills: 1605038400000(2020-11-11 04:00:00)
 *
 * @param mills     当前时间
 * @param resetHour 设定的重置的小时(24h), 默认4点
 * @return long mills
 */
public static long getNextResetMills(long mills, int resetHour) {
	return getFutureResetMills(mills, resetHour);
}

自定义重置时间, 判断是否是同一天

简单的做法, 直接获取这两个时间戳的下次重置时间, 判断是否相同就可以了

代码语言:javascript
复制
/**
 * 自定义重置时间, 判断是否是同一天
 * 示例
 * resetHour: 4:
 * aMills: 1605038340000(2020-11-11 03:59:00)
 * bMills: 1605038400000(2020-11-11 04:00:00) - same day: false
 * <p>
 * resetHour: 4:
 * aMills: 1605024000000(2020-11-11 00:00:00)
 * bMills: 1605020400000(2020-11-10 23:00:00) - same day: true
 *
 * @param aMills    long
 * @param bMills    long
 * @param resetHour 重置时间(24h)
 * @return boolean true: 是同一天
 */
public static boolean isSameDay(long aMills, long bMills, int resetHour) {
	return getNextResetMills(aMills, resetHour) == getNextResetMills(bMills, resetHour);
}

这是昨天记录的笔记, 感谢您的查阅

若是有问题欢迎指正

谢谢

:)


以上笔记来自公众号分享, 发到这里我也是想看看能不能涨粉:)

还望各位理解

同时

也还请各位赏脸, 动动您发财的小手, 扫码关注一下下 谢谢您

代码语言:javascript
复制
公众号主要分享一些后端游服程序方面的知识与经验, 包含nodejs, java,python

程序员品
程序员品

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档