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