作者:陈宏鸿
链接:https://www.cnblogs.com/aspwebchh/p/12220673.html
本人是做游戏服务器开发的,碰到一个需求,给符某些要求的玩家的发送道具奖励,奖励的数量根据离线的天数计算。
这个需求实现起来很简单,只需要在玩家上线的时候计算上次离线时间和当前时间间隔的天数,然后根据策划的算法,计算出道具种类与数量,发一封邮件给玩家就可以了。
计算两个时间间隔天数的函数没有现成的,自己又懒得写,就上谷歌搜了下,选了第一条结果,代码如下
publicstaticintdifferentDays(Date date1,Date date2)
{
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
intday1= cal1.get(Calendar.DAY_OF_YEAR);
intday2 = cal2.get(Calendar.DAY_OF_YEAR);
intyear1 = cal1.get(Calendar.YEAR);
intyear2 = cal2.get(Calendar.YEAR);
if(year1 != year2)//同一年
{
inttimeDistance =0;
for(inti = year1 ; i < year2 ; i ++)
{
if(i%4==0&& i%100!=0|| i%400==0)//闰年
{
timeDistance +=366;
}
else//不是闰年
{
timeDistance +=365;
}
}
returntimeDistance + (day2-day1) ;
}
else//不同年
{
System.out.println("判断day2 - day1 : "+ (day2-day1));
returnday2-day1;
}
}
把代码复制到项目里,调试下,发现没问题就直接用了,毕竟谷歌结果第一名,放心。
这段代码跑了几个月一直没问题,但是到了2020-1-1日那天,有玩家反馈收到了几百封奖励邮件,高兴坏了,但是出于对游戏的热爱,还是通知了运营人员。
运营把bug反馈到服务器这边后我开始排查,百思不得其解的是最近几天都没有更新服务器, 而前几天服务器都稳稳地,怎么突然就出BUG了呢。
接下来就是分析玩家数据,结合代码逻辑确定问题所在,最终根据BUG的表现排除了所有可能性后,发现唯一可能出问题的地方就是那个网上复制过来的计算天数差的函数。
根据调试发现,这个函数在两个日期参数是不同的年份并且第一个日期大于第二个日期的时候,会返回一个错误的结果
比如
differentDays("2020-1-1","2019-12-25")
理论上这么调用正确的结果是 -7,但是因为函数有bug,调用结果是 358
于是本来不用发奖励,因为这种特殊情况一下子发出去358份,严重影响了游戏某类道具的平衡性。
至于补救方式就是统计名单,把发出去但还没有用掉的道具回收,用掉的就当福利,然后再发公告道歉,再送些其他物品弥补。
也幸好补救的及时,要是这些道具收不回来,游戏运营的策略都要大变了,我特么肯定没好果子吃了。
所以千万别在网上复制来路不明的代码乱用,如果真的要用,必须反复测试,否则哪一天突然暴雷有你受的。
改用Java8的日期库修复了BUG
publicstaticintdifferentDays(Date date1, Date date2){
if(date1 ==null|| date2 ==null) {
thrownewRuntimeException("日期不能为空");
}
LocalDate localDate1 = date2LocalDate(date1);
LocalDate localDate2 = date2LocalDate(date2);
returnGeneric.long2int(localDate1.until(localDate2, ChronoUnit.DAYS));
}
publicstaticLocalDatedate2LocalDate(Date date){
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDate localDate = instant.atZone(zoneId).toLocalDate();
returnlocalDate;
}
<END>
发布于 2020-04-24
赞同添加评论
分享
收藏收起
发表了文章1 天前
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
来自:Margaret Heffernan,心理学家、著有《盲目心理学》 离开一家公司,是对自己人生轨迹的调整。为什么离开一家公司,更多人是基于对公司的不满:执行力低、不够团结、勾心斗角...... 但如…阅读全文
赞同添加评论
分享
收藏 举报
发表了文章3 天前
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
2 人赞同了该文章
来自:HR人力资源成长俱乐部 互联网大厂新入职员工各职级薪资对应表(技术线)~ △图片数据来源:知乎曾加 上面的表格不排除有很极端的收入情况,但至少能囊括一部分同职级的收入。这个表是“技术线”新入职员工的职…阅读全文
赞同 2添加评论
分享
收藏 举报
发表了文章6 天前
痛心!Pandownload开发者被抓!我终于决定使用Docker搭建一个多端同步网盘!
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
1 人赞同了该文章
原文地址:https://www.jianshu.com/p/54f157a211af 作者:zhaoolee 想必大家最近都被 “Pandownload 开发者被抓” 的新闻刷屏了。 说实话挺揪心了!站在使用者的角度我感谢他提供了一…阅读全文
赞同 1添加评论
分享
收藏 举报
发表了文章10 天前
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
来自:西二旗生活指北 当当可以4折买书了!!!戳我直达 END 本文发于 微星公众号「程序员的成长之路」,回复「1024」你懂得,给个赞呗。 回复 [ 256 ] Java 程序员成长规划 回复 [ 777…阅读全文
赞同添加评论
分享
收藏 举报
发表了文章10 天前
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
作者 | 玄隐 来源 | https://www.ithome.com/0/468/814.html JetBrains最近推出了一种新字体,即JetBrains Mono,它是专为开发人员设计的。 JetBrains表示: 在当今的大…阅读全文
赞同添加评论
分享
收藏 举报
发表了文章10 天前
高烧40℃还加班!杭州30岁IT男复工后疯狂冲业绩,出现“白肺”上了ECMO!还进ICU,教训惨痛…
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
1 人赞同了该文章
只有疾病真正来临,人才会真正意识到,什么都比不上健康重要。还是那句话:身体是革命的本钱。 从事IT行业的小梁(化名)正当壮年,今年30岁,因为一场发烧进了ICU。之前,他也以为自己身体底子好,什么都能“…阅读全文
赞同 12 条评论
分享
收藏 举报
发表了文章13 天前
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
网传的互联网公司加班情况表: END 本文发于 微星公众号「程序员的成长之路」,回复「1024」你懂得,给个赞呗。 回复 [ 256 ] Java 程序员成长规划 回复 [ 777 ] 接私活的七大平台利器 回…阅读全文
赞同添加评论
分享
收藏
发表了文章13 天前
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
作者:局长 出处:https://www.oschina.net/news/114775/intellij-idea-2020-1-released IntelliJ IDEA 2020.1 稳定版来了!这是今年发布的首个重大更新版本,新版本增加了对 Java 14 的支持、为部分 We…阅读全文
赞同添加评论
分享
收藏
发表了文章15 天前
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
3 人赞同了该文章
来自:u6.gg/sSXQU 注解本身没有功能的,就和xml一样。注解和xml都是一种元数据,元数据即解释数据的数据,这就是所谓配置。 本文主要罗列Spring|SpringMVC相关注解的简介。 Spri…阅读全文
赞同 31 条评论
分享
收藏
发表了文章15 天前
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
来自:BAT 刚刚,百度APP被要求整改! 国家互联网信息办公室指导北京市互联网信息办公室,针对百度APP多个频道存在严重违规问题,严肃约谈百度公司负责人,要求立即停止违规行为。 百度APP推荐频道、图片频…阅读全文
赞同添加评论
分享
收藏
发表了文章19 天前
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
最近,知乎上有一则灵魂拷问“一个程序员的水平能差到什么程度?”让各位程序员们纷纷有感而发。小编精选了两个有趣的高赞回答只为抛砖引玉,欢迎大家说出你的故事! 图片来自 Pexels 1 来自知乎网友“Benn…阅读全文
赞同添加评论
分享
收藏
发表了文章21 天前
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
来自:每日经济新闻(ID:nbdnews)综合都市快报(记者 朱文科)、国家税务总局官网等编辑:赵云 王嘉琦 因疫情而延宕近一个月的2019年个人所得税年度汇算,终于开始了。 根据国家税务总局近期发布的服…阅读全文
赞同添加评论
分享
收藏
发表了文章25 天前
惊呆了,老外竟然用50中编程语言写“Hello,Word!”,我服了...
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
作者:Sylvain Saurel | 译者:夏夜 | 策划:万佳 原文链接:https://urlify.cn/YJJV7r 这是一个计算机世界的编程时光之旅。 对很多人来说,每当学习一门新的编程语言,写下的第一行代码可…阅读全文
赞同添加评论
分享
收藏
发表了文章1 个月前
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
8 人赞同了该文章
来自:量子位(QbitAI) 从挖矿、变现到被判3年,一位百度员工在短短7个月内走完了这三部曲。 没错,挖矿用的是百度的搜索服务器。 在最近公布的一份裁判文书中,公布了百度运维安某的“薅羊毛”细节。 从201…阅读全文
赞同 81 条评论
分享
收藏
发表了文章1 个月前
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
1 人赞同了该文章
阿里回应: 关闭提醒即可。 有童鞋回复: 更新淘宝app版本到9.5.15即可修复,弹窗不会再弹出! 有童鞋已做试验(苹果手机会有问题,安卓系统的没这个问题哦): 有网友把手机时间设置到3月28号之后,…阅读全文
赞同 12 条评论
分享
收藏
发表了文章1 个月前
Mac IntelliJ IDEA 快捷键终极大全,速度收藏!
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
1 人赞同了该文章
来源:Givefinecnblogs.com/wxd0108/p/5295017.html 上期很多朋友留言说有没有 Mac 版的,现在来了,这篇是整理得比较全的了,建议大家收藏,日后必定有用!Mac键…阅读全文
赞同 1添加评论
分享
收藏
发表了文章1 个月前
Windows IntelliJ IDEA 快捷键终极大全,速度收藏!
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
来源:有趣的灵魂算我一个 http://blog.csdn.net/weixin_42189233 自动代码 常用的有fori/sout/psvm+Tab即可生成循环、System.out、main方法等boilerplat…阅读全文
赞同添加评论
分享
收藏
关注了专栏1 个月前
和我一起使用优财助手,探索低风险投资之路
发表了文章1 个月前
Java 14 令人期待的 5 大新特性,打包工具终于要来了!
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
原文:https://medium.com/better-programming/top-5-new-features-expected-in-java-14-82c0d85b295e 本文为 CSDN 翻译,译者:苏本如 随着新的 Java 发布生命周期的到来,新版本预计将于 2020 年 3 月发布,本文将对其中的 5 个…阅读全文
赞同1 条评论
分享
收藏
发表了文章2 个月前
Java8 的 Stream API 的确牛X,但性能究竟如何呢?
一个不羁的码农,终生学习者。公众号「程序员的成长之路」
来自:http://github.com/CarpenterLee/JavaLambdaInternals Stream Performance 已经对 Stream API 的用法鼓吹够多了,用起简洁直观,但性能到底怎么样呢?会不会有很高的性能损失?本节我…阅读全文
赞同添加评论
分享
收藏
创作者中心Lv 5
有新权益待开启
昨日被阅读数
10
较前日
11.11%
昨日获赞同数
0
较前日
--
个人成就
获得 6,296 次赞同
获得 10 次喜欢,16,532 次收藏
1
2,060
个人主页被浏览 3,483 次
互联网药品信息服务资格证书
(京)- 非经营性 - 2017 - 0067
违法和不良信息举报:010-82716601
网友评论