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 }

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

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

转载于:https://www.cnblogs.com/junwang/p/3667989.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值