专业

深圳网站优化客服热线:SEO

揭秘百度SEO快排7天上首页秘籍详情

深圳网站优化

当前位置:首页 > 技术教程

不要网上乱拷贝代码了!一段网上找的代码突然炸了! - Java圈子的个人空间 - OSCHINA

来源: 作者: 访问次数:142

不要网上乱拷贝代码了!一段网上找的代码突然炸了!

Java圈子
 Java圈子 发布于 20分钟前
字数 1029
阅读 7
收藏 0
点赞 0
评论 0
SpringJava

【推荐阅读】微服务还能火多久?>>>

碰到一个需求,给服某些要求的玩家的发送道具奖励,奖励的数量根据离线的天数计算。

这个需求实现起来很简单,只需要在玩家上线的时候计算上次离线时间和当前时间间隔的天数,然后根据策划的算法,计算出道具种类与数量,发一封邮件给玩家就可以了。

计算两个时间间隔天数的函数没有现成的,自己又懒得写,就上谷歌搜了下,选了第一条结果,代码如下

public static int differentDays(Date date1,Date date2)
    {
        Calendar cal1 = Calendar.getInstance();
        cal1.setTime(date1);
        Calendar cal2 = Calendar.getInstance();
        cal2.setTime(date2);
       int day1= cal1.get(Calendar.DAY_OF_YEAR);
        int day2 = cal2.get(Calendar.DAY_OF_YEAR);
        int year1 = cal1.get(Calendar.YEAR);
        int year2 = cal2.get(Calendar.YEAR);
        if(year1 != year2)   //同一年
        {
            int timeDistance = 0 ;
            for(int i = year1 ; i < year2 ; i ++)
            {
                if(i%4==0 && i%100!=0 || i%400==0)    //闰年
                {
                    timeDistance += 366;
                }
                else    //不是闰年
                {
                    timeDistance += 365;
                }
            }
            return timeDistance + (day2-day1) ;
        }
        else    //不同年
        {
            System.out.println("判断day2 - day1 : " + (day2-day1));
            return day2-day1;
        }
    }

代码来源:https://www.cnblogs.com/0201zcr/p/5000977.html

把代码复制到项目里,调试下,发现没问题就直接用了,毕竟谷歌结果第一名,放心。

这段代码跑了几个月一直没问题,但是到了2020-1-1日那天,有玩家反馈收到了几百封奖励邮件,高兴坏了,但是出于对游戏的热爱,还是通知了运营人员。

运营把bug反馈到服务器这边后我开始排查,百思不得其解的是最近几天都没有更新服务器, 而前几天服务器都稳稳地,怎么突然就出BUG了呢。

接下来就是分析玩家数据,结合代码逻辑确定问题所在,最终根据BUG的表现排除了所有可能性后,发现唯一可能出问题的地方就是那个网上复制过来的计算天数差的函数。

根据调试发现,这个函数在两个日期参数是不同的年份并且第一个日期大于第二个日期的时候,会返回一个错误的结果

比如

differentDays("2020-1-1","2019-12-25")理论上这么调用正确的结果是 -7,但是因为函数有bug,调用结果是 358

于是本来不用发奖励,因为这种特殊情况一下子发出去358份,严重影响了游戏某类道具的平衡性。

至于补救方式就是统计名单,把发出去但还没有用掉的道具回收,用掉的就当福利,然后再发公告道歉,再送些其他物品弥补。

也幸好补救的及时,要是这些道具收不回来,游戏运营的策略都要大变了,我特么肯定没好果子吃了。

所以千万别在网上复制来路不明的代码乱用,如果真的要用,必须反复测试,否则哪一天突然暴雷有你受的。

改用Java8的日期库修复了BUG

public static int differentDays(Date date1, Date date2) {
    if (date1 == null || date2 == null) {
        throw new RuntimeException("日期不能为空");
    }
    LocalDate localDate1 = date2LocalDate(date1);
    LocalDate localDate2 = date2LocalDate(date2);
    return Generic.long2int(localDate1.until(localDate2, ChronoUnit.DAYS));
}
​
public static LocalDate date2LocalDate(Date date) {
    Instant instant = date.toInstant();
    ZoneId zoneId = ZoneId.systemDefault();
    LocalDate localDate = instant.atZone(zoneId).toLocalDate();
    return localDate;
}

原文链接: https://www.cnblogs.com/aspwebchh/p/12220673.html 文源网络,仅供学习之用,如有侵权,联系删除。

我将优质的技术文章和经验总结都汇集在了我的公众号【Java圈子】里。

为方便大家学习,我还整理了一套学习资料,涵盖Java虚拟机、spring框架、Java线程、数据结构、设计模式等等,免费提供给热爱Java的同学~

file

© 著作权归作者所有

  • 浅析网站建设时如何降低网站跳出率
  • 网站建设规划应考虑哪些因素
  • 农业网站建设维护保养内容指哪些方面?
  • 网站建设后网站运营实战技巧二-如何打造高质量外链
  • 网站建设三部曲:域名程序+主机
  • 网站推广价格及渠道分析
  • seo网站推广,seo网络推广,seo推广优化
  • 解锁SEO实战密码60天网站流量提高20倍-效果监测
  • 您应该内部进行SEO优化还是将SEO外包?
  • SEO网站排名,大量页面不收录,实际案例分享与解决方案!
  • 我们在撰写SEO原创文章时容易犯哪些错误
  • SEO优化中的「坑」-“死链”
  • 每周分享(蜘蛛)在SEO中扮演的角色
  • 您访问的网站存在风险!
  • 如何向老板传达SEO优化的重要性?
  • SEO推广霸屏效果,站内优化功不可没
  • 网络推广和网络营销有什么区别-西安新新人类网络
  • 网络推广效果不好我们怎么来找原因
  • 郑州网络推广公司哪家强?
  • 每天一个网络推广秘籍,新浪微博加速提升企业广告效果
  • SEO 网站优化的步骤和技巧有哪些?(上)
  • 不懂SEO技术,该如何进行互联网营销?
  • Google 广告投放看不到成效?快来检查独立站 SEO 设置!
  • SEO排名优化萎靡不振?是和缘故?
  • SEO优化listing总优化不好?那是因为你不懂这件事!
  • 浅谈网站建设时重点是什么
  • 小溪畅流浅谈网站建设对公司发展起到了什么样的作用?
  • 河南平头哥霸屏网络推广:网站优化就是不断更新网站吗?
  • 新手在公司上班应该怎么去做好网络推广工作
  • 成都网络推广排名呼之欲出?站内优化是核心
  • 2020家居企业如何低成本通过“网络推广”新增客户实例问答
  • 企业网站优化,为什么SEO人员配置与培训很重要?
  • 选择SEO,还是付费推广?
  • SEO关键词排名该掌握的核心优化技巧
  • 为啥爆单总与你无缘?学会亚马逊SEO技巧,你早就成大卖了
  • 积累有价值的seo资源提高网站优化效果
  • SEO网站优化,新手SEO常犯的五个错误!
  • 渠成填补SEO空白 助行业生生不息
  • 为什么Google SEO见效慢
  • 一组图告诉你什么叫史上最全的SEO优化步骤