zoukankan      html  css  js  c++  java
  • iOS计算二十四节气区间问题的订正

    公司需要解决判断当前日期处于那个对应节气区间,参照需求

    在当前网上关于而是二十四节气的算法核心:

        if(iDay <15)     
            day= 15 - ((flag>>4)&0x0f);      
        else      
            day = ((flag)&0x0f)+15;  
          
        int index = -1;  
        //对应日期节气判断
        if(iDay == day){   
            index = (iMonth-1) *2 + (iDay>15? 1: 0);   
        }  


    修改后代码改正如下,可以判断出对应节气区间区间:

     1 - (NSInteger)lunarIndex {
     2     NSCalendar *localeCalendar = [NSCalendar currentCalendar];
     3     
     4     unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
     5     
     6     NSDateComponents *localeComp = [localeCalendar components:unitFlags fromDate:self];
     7     
     8     NSInteger iYear = localeComp.year;
     9     NSInteger iMonth = localeComp.month;
    10     NSInteger iDay = localeComp.day;
    11     
    12     
    13     int array_index = (iYear - START_YEAR)*12+iMonth -1 ;
    14     
    15     int64_t flag = gLunarHolDay[array_index];
    16     int64_t day;
    17     
    18     int index_in_month = 0;
    19     
    20     if(iDay <15)
    21         day= 15 - ((flag>>4)&0x0f);
    22     else {
    23         day = ((flag)&0x0f)+15;
    24         index_in_month += 1;
    25     }
    26     
    27     int index = -1;
    28 
    29     index = (iMonth-1) *2 + index_in_month;
    30     
    31     if (iDay >= day) {
    32         
    33     } else {
    34         index -=1;
    35         if (index < 0) {
    36             index = 24 - 1;
    37         }
    38     }
    39     //从立春开始
    40     if ( index >= 0  && index < 24 ) {
    41         return (index + 22) % 24 + 1;
    42     } else {
    43         return InvalidLunarIndex;
    44     }
    45 }

    在改写过程中出现了边界值未判断的问题,更正后,将所有相关条件结果在同一判断条件内完成组织,干掉三元。

    如此看,为了避免边界值问题,应该将相关条件结果在同一判断条件内统和,然后世界就和谐了。

  • 相关阅读:
    python目录
    面向对象
    模块(二)
    python函数(四)
    助教工作总结
    第五次个人作业:个人总结
    Typroa编写的图片上传博客园
    msfconsole利用ms17-010和ms12-020攻击
    第四次个人作业——案例分析
    助教周报(第二轮)
  • 原文地址:https://www.cnblogs.com/junwang/p/3667989.html
Copyright © 2011-2022 走看看