<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      吸取教訓:一段網上找的代碼突然爆了,項目出現大BUG

      本人是做游戲服務器開發的,碰到一個需求,給符某些要求的玩家的發送道具獎勵,獎勵的數量根據離線的天數計算。

      這個需求實現起來很簡單,只需要在玩家上線的時候計算上次離線時間和當前時間間隔的天數,然后根據策劃的算法,計算出道具種類與數量,發一封郵件給玩家就可以了。

      計算兩個時間間隔天數的函數沒有現成的,自己又懶得寫,就上谷歌搜了下,選了第一條結果,代碼如下

       

      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;
              }
          }

       

      代碼來源:http://www.rzrgm.cn/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;
          }

       

      posted @ 2020-01-21 09:33  陳宏鴻  閱讀(4331)  評論(20)    收藏  舉報
      主站蜘蛛池模板: 日韩精品人妻黄色一级片| 午夜福利片1000无码免费| 亚洲av成人午夜福利| 国产精品午夜福利91| 国产在线无码精品无码| 91福利国产午夜亚洲精品| 久久精品丝袜高跟鞋| 一本色道久久综合熟妇人妻 | 久青草国产综合视频在线| 亚洲国产青草衣衣一二三区| 97精品尹人久久大香线蕉| 国内熟妇人妻色在线视频| 亚洲天堂激情av在线| 国产偷国产偷亚洲清高网站| 九九热视频在线精品18| 亚洲欧美综合人成在线| 常宁市| 日韩一区二区三区精品区 | 国产a在视频线精品视频下载| 亚洲性一交一乱一伦视频| 亚洲精品午夜国产VA久久成人| 97国产成人无码精品久久久| 亚洲成人av在线综合| 邛崃市| 久久热这里这里只有精品| 婷婷综合亚洲| 久久久久噜噜噜亚洲熟女综合| 日韩精品欧美高清区| 午夜综合网| 欧美一本大道香蕉综合视频| 午夜毛片不卡免费观看视频| 色综合 图片区 小说区| 高清国产一区二区无遮挡| 国产成人综合亚洲欧美日韩 | 成人做爰www网站视频| 日韩V欧美V中文在线| 精品亚洲国产成人痴汉av| 97人妻精品一区二区三区| 好紧好爽好湿别拔出来视频男男| 国产精品自拍午夜福利| 成人性生交大片免费看r链接|