From 37c8b915c7e348e55c16bbd963b470de642e46ac Mon Sep 17 00:00:00 2001
From: jgzhou <996155731@qq.com>
Date: Fri, 09 Apr 2021 02:01:41 +0000
Subject: [PATCH] 优化

---
 Lunar/Lunar/Tool/Lunar.m |   48 ++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 40 insertions(+), 8 deletions(-)

diff --git a/Lunar/Lunar/Tool/Lunar.m b/Lunar/Lunar/Tool/Lunar.m
index 62d8613..d380a3f 100644
--- a/Lunar/Lunar/Tool/Lunar.m
+++ b/Lunar/Lunar/Tool/Lunar.m
@@ -121,6 +121,11 @@
 + (instancetype)fromDate:(NSDate *)date
 {
     Solar *solar = [Solar fromDate:date];
+    return [self fromSolar:solar];
+}
+
++ (instancetype)fromSolar:(Solar *)solar
+{
     NSInteger y = solar.year;
     NSInteger m = solar.month;
     NSInteger d = solar.day;
@@ -128,16 +133,19 @@
     NSInteger startYear = [SolarUtil share].BASE_YEAR + 99;
     NSInteger startMonth = 1;
     NSInteger startDay = 1;
+    
     NSInteger lunarYear = [LunarUtil share].BASE_YEAR + 99;
     NSInteger lunarMonth = 11;
     NSInteger lunarDay = 25;
+    
     if (y < 2000) {
-      startYear = [SolarUtil share].BASE_YEAR;
-      startMonth = [SolarUtil share].BASE_MONTH;
-      startDay = [SolarUtil share].BASE_DAY;
-      lunarYear = [LunarUtil share].BASE_YEAR;
-      lunarMonth = [LunarUtil share].BASE_MONTH;
-      lunarDay = [LunarUtil share].BASE_DAY;
+        startYear = [SolarUtil share].BASE_YEAR;
+        startMonth = [SolarUtil share].BASE_MONTH;
+        startDay = [SolarUtil share].BASE_DAY;
+        
+        lunarYear = [LunarUtil share].BASE_YEAR;
+        lunarMonth = [LunarUtil share].BASE_MONTH;
+        lunarDay = [LunarUtil share].BASE_DAY;
     }
     
     NSInteger diff = 0;
@@ -2832,18 +2840,36 @@
     NSInteger d = 30;
     
     if (1 <= month && month <= 8) {
+        
+        if (2*index >= [LunarUtil share].LUNAR_MONTH.count) {
+            NSLog(@"getDaysOfMonth 数组越界:%@", @(month));
+            return d;
+        }
+                
         NSInteger v = [[LunarUtil share].LUNAR_MONTH[2*index] integerValue];
         NSInteger l = month - 1;
         if (((v >> l) & 0x01) == 1) {
             d = 29;
         }
     } else if (9 <= month && month <= 12) {
+        
+        if (2*index >= [LunarUtil share].LUNAR_MONTH.count) {
+            NSLog(@"getDaysOfMonth 数组越界:%@", @(month));
+            return d;
+        }
+        
         NSInteger v = [[LunarUtil share].LUNAR_MONTH[2*index+1] integerValue];
         NSInteger l = month - 9;
         if (((v >> l) & 0x01) == 1) {
             d = 29;
         }
     } else {
+        
+        if (2*index+1 >= [LunarUtil share].LUNAR_MONTH.count) {
+            NSLog(@"getDaysOfMonth 数组越界:%@", @(month));
+            return d;
+        }
+        
         NSInteger v = [[LunarUtil share].LUNAR_MONTH[2*index+1] integerValue];
         v = (v >> 4) & 0x0F;
         if (v != labs(month)) {
@@ -2870,7 +2896,13 @@
 + (NSInteger)getLeapMonth:(NSInteger)year
 {
     NSInteger index = year - [LunarUtil share].BASE_YEAR + [LunarUtil share].BASE_INDEX;
-    NSInteger v = [[LunarUtil share].LUNAR_MONTH[2*index + 1] integerValue];
+    
+    if (2*index+1 >= [LunarUtil share].LUNAR_MONTH.count) {
+        NSLog(@"getLeapMonth 数组越界:%@", @(year));
+        return 0;
+    }
+    
+    NSInteger v = [[LunarUtil share].LUNAR_MONTH[2*index+1] integerValue];
     v = (v >> 4) & 0x0F;
     return v;
 }
@@ -5040,7 +5072,7 @@
 
 - (Lunar *)getLunar
 {
-    return [Lunar fromDate:_calendar];
+    return [Lunar fromSolar:self];
 }
 
 /**

--
Gitblit v1.9.1