1
0
mirror of synced 2025-12-11 16:07:58 +08:00

v1.2.18 修复SolarWeek获取当月第几周的错误。

This commit is contained in:
6tail
2022-01-10 20:45:45 +08:00
parent 3e256ddbd3
commit 0a5ea27b20
7 changed files with 114 additions and 32 deletions

View File

@@ -16,7 +16,7 @@ lunar是一款无第三方依赖的公历(阳历)、农历(阴历、老黄历)
<dependency>
<groupId>cn.6tail</groupId>
<artifactId>lunar</artifactId>
<version>1.2.17</version>
<version>1.2.18</version>
</dependency>
```

View File

@@ -12,7 +12,7 @@ lunar is a calendar library for Solar and Chinese Lunar.
<dependency>
<groupId>cn.6tail</groupId>
<artifactId>lunar</artifactId>
<version>1.2.17</version>
<version>1.2.18</version>
</dependency>
```

View File

@@ -7,7 +7,7 @@
<groupId>cn.6tail</groupId>
<artifactId>lunar</artifactId>
<packaging>jar</packaging>
<version>1.2.17</version>
<version>1.2.18</version>
<name>${project.groupId}:${project.artifactId}</name>
<url>https://github.com/6tail/lunar-java</url>
<description>a calendar library for Solar and Chinese Lunar</description>

View File

@@ -833,16 +833,14 @@ public class Lunar {
* @return 节令
*/
public String getJie() {
String jie = "";
for(int i=0,j=JIE_QI_IN_USE.length;i<j;i+=2){
for(int i=0, j=JIE_QI_IN_USE.length; i<j; i+=2){
String key = JIE_QI_IN_USE[i];
Solar d = jieQi.get(key);
if (d.getYear() == solar.getYear() && d.getMonth() == solar.getMonth() && d.getDay() == solar.getDay()) {
jie = key;
break;
return convertJieQi(key);
}
}
return convertJieQi(jie);
return "";
}
/**
@@ -851,16 +849,14 @@ public class Lunar {
* @return 气令
*/
public String getQi() {
String qi = "";
for(int i=1,j=JIE_QI_IN_USE.length;i<j;i+=2){
for(int i=1, j=JIE_QI_IN_USE.length; i<j; i+=2){
String key = JIE_QI_IN_USE[i];
Solar d = jieQi.get(key);
if (d.getYear() == solar.getYear() && d.getMonth() == solar.getMonth() && d.getDay() == solar.getDay()) {
qi = key;
break;
return convertJieQi(key);
}
}
return convertJieQi(qi);
return "";
}
/**
@@ -2389,15 +2385,13 @@ public class Lunar {
* @return 节气名称
*/
public String getJieQi() {
String name = "";
for (Map.Entry<String, Solar> jq : jieQi.entrySet()) {
Solar d = jq.getValue();
if (d.getYear() == solar.getYear() && d.getMonth() == solar.getMonth() && d.getDay() == solar.getDay()) {
name = jq.getKey();
break;
return convertJieQi(jq.getKey());
}
}
return convertJieQi(name);
return "";
}
/**
@@ -2406,8 +2400,13 @@ public class Lunar {
* @return 节气对象
*/
public JieQi getCurrentJieQi() {
String name = getJieQi();
return name.length() > 0 ? new JieQi(name, solar) : null;
for (Map.Entry<String, Solar> jq : jieQi.entrySet()) {
Solar d = jq.getValue();
if (d.getYear() == solar.getYear() && d.getMonth() == solar.getMonth() && d.getDay() == solar.getDay()) {
return new JieQi(convertJieQi(jq.getKey()), d);
}
}
return null;
}
/**
@@ -2416,8 +2415,14 @@ public class Lunar {
* @return 节气对象
*/
public JieQi getCurrentJie() {
String name = getJie();
return name.length() > 0 ? new JieQi(name, solar) : null;
for(int i=0, j=JIE_QI_IN_USE.length; i<j; i+=2){
String key = JIE_QI_IN_USE[i];
Solar d = jieQi.get(key);
if (d.getYear() == solar.getYear() && d.getMonth() == solar.getMonth() && d.getDay() == solar.getDay()) {
return new JieQi(convertJieQi(key), d);
}
}
return null;
}
/**
@@ -2426,8 +2431,14 @@ public class Lunar {
* @return 节气对象
*/
public JieQi getCurrentQi() {
String name = getQi();
return name.length() > 0 ? new JieQi(name, solar) : null;
for(int i=1, j=JIE_QI_IN_USE.length; i<j; i+=2){
String key = JIE_QI_IN_USE[i];
Solar d = jieQi.get(key);
if (d.getYear() == solar.getYear() && d.getMonth() == solar.getMonth() && d.getDay() == solar.getDay()) {
return new JieQi(convertJieQi(key), d);
}
}
return null;
}
public String toFullString() {
@@ -2964,10 +2975,8 @@ public class Lunar {
public String getHou() {
JieQi jieQi = getPrevJieQi(true);
String name = jieQi.getName();
Calendar currentCalendar = ExactDate.fromYmd(solar.getYear(), solar.getMonth(), solar.getDay());
Solar startSolar = jieQi.getSolar();
Calendar startCalendar = ExactDate.fromYmd(startSolar.getYear(), startSolar.getMonth(), startSolar.getDay());
int days = ExactDate.getDaysBetween(startCalendar, currentCalendar);
int days = ExactDate.getDaysBetween(startSolar.getYear(), startSolar.getMonth(), startSolar.getDay(), solar.getYear(), solar.getMonth(), solar.getDay());
return String.format("%s %s", name, LunarUtil.HOU[(days / 5) % LunarUtil.HOU.length]);
}

View File

@@ -159,10 +159,11 @@ public class SolarWeek {
public int getIndex() {
Calendar c = ExactDate.fromYmd(year, month, 1);
int firstDayWeek = c.get(Calendar.DAY_OF_WEEK) - 1;
if (firstDayWeek == 0) {
firstDayWeek = 7;
int offset = firstDayWeek - start;
if(offset < 0) {
offset += 7;
}
return (int) Math.ceil((day + firstDayWeek - start) / 7D);
return (int) Math.ceil((day + offset) / 7D);
}
/**

View File

@@ -62,10 +62,8 @@ public class Yun {
int startTimeZhiIndex = (start.getHour() == 23) ? 11 : LunarUtil.getTimeZhiIndex(start.toYmdHms().substring(11, 16));
// 时辰差
int hourDiff = endTimeZhiIndex - startTimeZhiIndex;
Calendar endCalendar = ExactDate.fromYmd(end.getYear(), end.getMonth(), end.getDay());
Calendar startCalendar = ExactDate.fromYmd(start.getYear(), start.getMonth(), start.getDay());
// 天数差
int dayDiff = (int) ((endCalendar.getTimeInMillis() - startCalendar.getTimeInMillis()) / (1000 * 3600 * 24));
int dayDiff = ExactDate.getDaysBetween(start.getYear(), start.getMonth(), start.getDay(), end.getYear(), end.getMonth(), end.getDay());
if (hourDiff < 0) {
hourDiff += 12;
dayDiff--;

View File

@@ -0,0 +1,74 @@
package test;
import com.nlf.calendar.SolarWeek;
import org.junit.Assert;
import org.junit.Test;
/**
* 阳历周测试
*
* @author 6tail
*/
public class SolarWeekTest {
@Test
public void test() {
SolarWeek week = SolarWeek.fromYmd(2022, 5, 1, 0);
Assert.assertEquals(1, week.getIndex());
}
@Test
public void test1() {
SolarWeek week = SolarWeek.fromYmd(2022, 5, 7, 0);
Assert.assertEquals(1, week.getIndex());
}
@Test
public void test2() {
SolarWeek week = SolarWeek.fromYmd(2022, 5, 8, 0);
Assert.assertEquals(2, week.getIndex());
}
@Test
public void test3() {
SolarWeek week = SolarWeek.fromYmd(2022, 5, 1, 1);
Assert.assertEquals(1, week.getIndex());
}
@Test
public void test4() {
SolarWeek week = SolarWeek.fromYmd(2022, 5, 2, 1);
Assert.assertEquals(2, week.getIndex());
}
@Test
public void test5() {
SolarWeek week = SolarWeek.fromYmd(2022, 5, 8, 1);
Assert.assertEquals(2, week.getIndex());
}
@Test
public void test6() {
SolarWeek week = SolarWeek.fromYmd(2021, 11, 1, 0);
Assert.assertEquals(1, week.getIndex());
}
@Test
public void test7() {
SolarWeek week = SolarWeek.fromYmd(2021, 11, 1, 1);
Assert.assertEquals(1, week.getIndex());
}
@Test
public void test8() {
SolarWeek week = SolarWeek.fromYmd(2021, 5, 2, 2);
Assert.assertEquals(1, week.getIndex());
}
@Test
public void test9() {
SolarWeek week = SolarWeek.fromYmd(2021, 5, 4, 2);
Assert.assertEquals(2, week.getIndex());
}
}