1
0
mirror of synced 2026-10-23 23:16:12 +08:00

Compare commits

...

7 Commits

16 changed files with 158 additions and 116 deletions

View File

@@ -11,3 +11,31 @@
## [1.3.14] - 2024-03-17 ## [1.3.14] - 2024-03-17
1. 修复八字转阳历存在遗漏的问题。 1. 修复八字转阳历存在遗漏的问题。
## [1.3.15] - 2024-11-12
1. 新增2025年法定假日数据。
## [1.4.0] - 2025-02-06
1. 修复九星错别字。
2. 优化每日宜忌算法。
3. 去除每日宜忌的重复项。
> 不建议使用该版本
## [1.7.0] - 2025-02-12
1. 修复每日宜忌错别字。
> 不建议使用该版本
## [1.7.1] - 2025-02-27
1. 修复每日宜忌错误。
> 不建议使用该版本
## [1.7.2] - 2025-03-05
1. 修复每日宜忌错误。
2. 更新2018之后的△T参数。
## [1.7.3] - 2025-04-07
1. 修复个别日太岁方位的错误。
2. 修复八字身宫计算错误的问题。
## [1.7.4] - 2025-04-29
1. 修复身宫报错的问题。

View File

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

View File

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

View File

@@ -7,7 +7,7 @@
<groupId>cn.6tail</groupId> <groupId>cn.6tail</groupId>
<artifactId>lunar</artifactId> <artifactId>lunar</artifactId>
<packaging>jar</packaging> <packaging>jar</packaging>
<version>1.3.14</version> <version>1.7.4</version>
<name>${project.groupId}:${project.artifactId}</name> <name>${project.groupId}:${project.artifactId}</name>
<url>https://github.com/6tail/lunar-java</url> <url>https://github.com/6tail/lunar-java</url>
<description>a calendar library for Solar and Chinese Lunar</description> <description>a calendar library for Solar and Chinese Lunar</description>
@@ -104,6 +104,7 @@
<goal>jar</goal> <goal>jar</goal>
</goals> </goals>
<configuration> <configuration>
<javadocExecutable>${java.home}/../bin/javadoc</javadocExecutable>
<additionalparam>-Xdoclint:none</additionalparam> <additionalparam>-Xdoclint:none</additionalparam>
<source>${source-version}</source> <source>${source-version}</source>
</configuration> </configuration>

View File

@@ -528,10 +528,10 @@ public class EightChar {
int monthZhiIndex = LunarUtil.find(getMonthZhi(), MONTH_ZHI, 0); int monthZhiIndex = LunarUtil.find(getMonthZhi(), MONTH_ZHI, 0);
int timeZhiIndex = LunarUtil.find(getTimeZhi(), LunarUtil.ZHI, 0); int timeZhiIndex = LunarUtil.find(getTimeZhi(), LunarUtil.ZHI, 0);
int offset = monthZhiIndex + timeZhiIndex; int offset = monthZhiIndex + timeZhiIndex;
while (offset > 12) { if (offset > 12) {
offset -= 12; offset -= 12;
} }
int ganIndex = (lunar.getYearGanIndexExact() + 1) * 2 + (offset % 12); int ganIndex = (lunar.getYearGanIndexExact() + 1) * 2 + offset;
while (ganIndex > 10) { while (ganIndex > 10) {
ganIndex -= 10; ganIndex -= 10;
} }

View File

@@ -1347,11 +1347,11 @@ public class Lunar {
protected String getDayPositionTaiSui(String dayInGanZhi, int yearZhiIndex) { protected String getDayPositionTaiSui(String dayInGanZhi, int yearZhiIndex) {
String p; String p;
if ("甲子,乙丑,丙寅,丁卯,戊辰,已巳".contains(dayInGanZhi)) { if ("甲子,乙丑,丙寅,丁卯,戊辰,己巳".contains(dayInGanZhi)) {
p = "震"; p = "震";
} else if ("丙子,丁丑,戊寅,已卯,庚辰,辛巳".contains(dayInGanZhi)) { } else if ("丙子,丁丑,戊寅,己卯,庚辰,辛巳".contains(dayInGanZhi)) {
p = "离"; p = "离";
} else if ("戊子,已丑,庚寅,辛卯,壬辰,癸巳".contains(dayInGanZhi)) { } else if ("戊子,己丑,庚寅,辛卯,壬辰,癸巳".contains(dayInGanZhi)) {
p = "中"; p = "中";
} else if ("庚子,辛丑,壬寅,癸卯,甲辰,乙巳".contains(dayInGanZhi)) { } else if ("庚子,辛丑,壬寅,癸卯,甲辰,乙巳".contains(dayInGanZhi)) {
p = "兑"; p = "兑";

View File

@@ -18,7 +18,7 @@ public class NineStar {
/** /**
* 七色 * 七色
*/ */
public static final String[] COLOR = {"白", "黒", "碧", "绿", "黄", "白", "赤", "白", "紫"}; public static final String[] COLOR = {"白", "黑", "碧", "绿", "黄", "白", "赤", "白", "紫"};
/** /**
* 五行 * 五行

View File

@@ -89,9 +89,13 @@ public class Solar {
if (month < 1 || month > 12) { if (month < 1 || month > 12) {
throw new IllegalArgumentException(String.format("wrong month %d", month)); throw new IllegalArgumentException(String.format("wrong month %d", month));
} }
if (day < 1 || day > 31) { if (day < 1) {
throw new IllegalArgumentException(String.format("wrong day %d", day)); throw new IllegalArgumentException(String.format("wrong day %d", day));
} }
int days = SolarUtil.getDaysOfMonth(year, month);
if (day > days) {
throw new IllegalArgumentException(String.format("only %d days in solar year %d month %d", days, year, month));
}
if (hour < 0 || hour > 23) { if (hour < 0 || hour > 23) {
throw new IllegalArgumentException(String.format("wrong hour %d", hour)); throw new IllegalArgumentException(String.format("wrong hour %d", hour));
} }

View File

@@ -9,7 +9,7 @@ import com.nlf.calendar.util.LunarUtil;
*/ */
public class LiuYue { public class LiuYue {
/** /**
* 序数,0-9 * 序数,0-11
*/ */
private final int index; private final int index;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -56,8 +56,10 @@ public class ShouXingUtil {
2000, 63.87, 0.1, 0, 0, 2000, 63.87, 0.1, 0, 0,
2005, 64.7, 0.21, 0, 0, 2005, 64.7, 0.21, 0, 0,
2012, 66.8, 0.22, 0, 0, 2012, 66.8, 0.22, 0, 0,
2018, 69.0, 0.36, 0, 0, 2018, 73.6, 0.40, 0, 0,
2028, 72.6 2021, 78.1, 0.44, 0, 0,
2024, 83.1, 0.55, 0, 0,
2028, 98.6
}; };
private static final double[] XL0 = { private static final double[] XL0 = {
10000000000D, 10000000000D,

View File

@@ -235,7 +235,7 @@ public class BaZiTest {
@Test @Test
public void testShenGong1() { public void testShenGong1() {
Lunar lunar = new Solar(1994, 12, 6, 2, 0, 0).getLunar(); Lunar lunar = new Solar(1994, 12, 6, 2, 0, 0).getLunar();
Assert.assertEquals("身宫", "乙丑", lunar.getEightChar().getShenGong()); Assert.assertEquals("身宫", "丁丑", lunar.getEightChar().getShenGong());
} }
@Test @Test
@@ -413,7 +413,7 @@ public class BaZiTest {
Solar solar = new Solar(1986, 5, 29, 13, 37, 0); Solar solar = new Solar(1986, 5, 29, 13, 37, 0);
Lunar lunar = solar.getLunar(); Lunar lunar = solar.getLunar();
EightChar eightChar = lunar.getEightChar(); EightChar eightChar = lunar.getEightChar();
Assert.assertEquals("己丑", eightChar.getShenGong()); Assert.assertEquals("辛丑", eightChar.getShenGong());
} }
@Test @Test
@@ -543,4 +543,10 @@ public class BaZiTest {
Assert.assertEquals(expected, actual); Assert.assertEquals(expected, actual);
} }
@Test
public void test32() {
Lunar lunar = Solar.fromYmdHms(1980, 6, 15, 12, 30, 30).getLunar();
EightChar eightChar = lunar.getEightChar();
Assert.assertEquals("身宫", "己丑", eightChar.getShenGong());
}
} }

View File

@@ -21,30 +21,30 @@ public class JieQiTest {
Map<String,String> jieQi = new HashMap<String, String>(){ Map<String,String> jieQi = new HashMap<String, String>(){
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
{ {
put("冬至","2021-12-21 23:59:18"); put("冬至","2021-12-21 23:59:09");
put("小寒","2022-01-05 17:14:03"); put("小寒","2022-01-05 17:13:54");
put("大寒","2022-01-20 10:39:05"); put("大寒","2022-01-20 10:38:56");
put("立春","2022-02-04 04:50:45"); put("立春","2022-02-04 04:50:36");
put("雨水","2022-02-19 00:43:00"); put("雨水","2022-02-19 00:42:50");
put("惊蛰","2022-03-05 22:43:43"); put("惊蛰","2022-03-05 22:43:34");
put("春分","2022-03-20 23:33:24"); put("春分","2022-03-20 23:33:15");
put("清明","2022-04-05 03:20:13"); put("清明","2022-04-05 03:20:03");
put("谷雨","2022-04-20 10:24:16"); put("谷雨","2022-04-20 10:24:07");
put("立夏","2022-05-05 20:25:56"); put("立夏","2022-05-05 20:25:47");
put("小满","2022-05-21 09:22:35"); put("小满","2022-05-21 09:22:25");
put("芒种","2022-06-06 00:25:47"); put("芒种","2022-06-06 00:25:38");
put("夏至","2022-06-21 17:13:50"); put("夏至","2022-06-21 17:13:40");
put("小暑","2022-07-07 10:37:59"); put("小暑","2022-07-07 10:37:49");
put("大暑","2022-07-23 04:06:58"); put("大暑","2022-07-23 04:06:49");
put("立秋","2022-08-07 20:29:07"); put("立秋","2022-08-07 20:28:57");
put("处暑","2022-08-23 11:16:09"); put("处暑","2022-08-23 11:15:59");
put("白露","2022-09-07 23:32:17"); put("白露","2022-09-07 23:32:07");
put("秋分","2022-09-23 09:03:41"); put("秋分","2022-09-23 09:03:31");
put("寒露","2022-10-08 15:22:26"); put("寒露","2022-10-08 15:22:16");
put("霜降","2022-10-23 18:35:41"); put("霜降","2022-10-23 18:35:31");
put("立冬","2022-11-07 18:45:28"); put("立冬","2022-11-07 18:45:18");
put("小雪","2022-11-22 16:20:28"); put("小雪","2022-11-22 16:20:18");
put("大雪","2022-12-07 11:46:15"); put("大雪","2022-12-07 11:46:04");
} }
}; };
@@ -183,7 +183,7 @@ public class JieQiTest {
@Test @Test
public void test8() { public void test8() {
Lunar lunar = Lunar.fromYmd(2050, 12, 1); Lunar lunar = Lunar.fromYmd(2050, 12, 1);
Assert.assertEquals("2050-12-07 06:41:13", lunar.getJieQiTable().get("DA_XUE").toYmdHms()); Assert.assertEquals("2050-12-07 06:40:53", lunar.getJieQiTable().get("DA_XUE").toYmdHms());
} }
@Test @Test
@@ -197,7 +197,13 @@ public class JieQiTest {
@Test @Test
public void test10() { public void test10() {
Lunar lunar = Solar.fromYmd(2023, 6, 1).getLunar(); Lunar lunar = Solar.fromYmd(2023, 6, 1).getLunar();
Assert.assertEquals("2022-12-22 05:48:11", lunar.getJieQiTable().get("冬至").toYmdHms()); Assert.assertEquals("2022-12-22 05:48:01", lunar.getJieQiTable().get("冬至").toYmdHms());
}
@Test
public void test11() {
Lunar lunar = Solar.fromYmd(2025, 3, 5).getLunar();
Assert.assertEquals("2025-03-05 16:07:02", lunar.getJieQiTable().get("惊蛰").toYmdHms());
} }
} }

View File

@@ -7,8 +7,7 @@ import org.junit.Test;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.*;
import java.util.TimeZone;
/** /**
* 农历测试 * 农历测试
@@ -409,7 +408,7 @@ public class LunarTest {
Lunar lunar = solar.getLunar(); Lunar lunar = solar.getLunar();
Assert.assertEquals("甲辰", lunar.getMonthInGanZhi()); Assert.assertEquals("甲辰", lunar.getMonthInGanZhi());
Assert.assertEquals("癸卯", lunar.getMonthInGanZhiExact()); Assert.assertEquals("癸卯", lunar.getMonthInGanZhiExact());
Assert.assertEquals(4, lunar.getDayJi().size()); Assert.assertEquals("[出火, 入宅, 安葬, 伐木]", lunar.getDayJi().toString());
} }
@Test @Test
@@ -651,4 +650,32 @@ public class LunarTest {
Assert.assertEquals("闭", lunar.getZhiXing()); Assert.assertEquals("闭", lunar.getZhiXing());
} }
@Test
public void test96() {
Lunar lunar = Solar.fromYmd(2025, 2, 7).getLunar();
Assert.assertEquals("[嫁娶, 祭祀, 祈福, 出行, 解除, 出火, 拆卸, 动土, 入宅, 移徙, 安床, 上梁, 栽种, 纳畜, 破土, 启钻, 安葬]", lunar.getDayYi().toString());
Assert.assertEquals("[开市, 立券, 理发, 作灶]", lunar.getDayJi().toString());
}
@Test
public void test97() {
Lunar lunar = Solar.fromYmd(2025, 3, 5).getLunar();
Assert.assertEquals("[破屋, 坏垣, 求医, 治病]", lunar.getDayYi().toString());
Assert.assertEquals("[诸事不宜]", lunar.getDayJi().toString());
}
@Test
public void test98() {
Lunar lunar = Solar.fromYmd(2025, 5, 3).getLunar();
Assert.assertEquals("[祭祀, 祈福, 求嗣, 斋醮, 沐浴, 纳畜, 入殓, 破土, 安葬]", lunar.getDayYi().toString());
Assert.assertEquals("[移徙, 入宅, 嫁娶, 出行, 安床]", lunar.getDayJi().toString());
}
@Test
public void test99() {
Lunar lunar = Solar.fromYmd(2025, 5, 4).getLunar();
Assert.assertEquals("[纳采, 祭祀, 祈福, 求嗣, 斋醮, 出行, 起基, 盖屋, 定磉, 安门, 入殓, 安葬]", lunar.getDayYi().toString());
Assert.assertEquals("[嫁娶, 开市, 纳财, 出火]", lunar.getDayJi().toString());
}
} }

View File

@@ -56,7 +56,7 @@ public class NineStarTest {
@Test @Test
public void test8() { public void test8() {
LunarMonth m = LunarMonth.fromYm(2022, 1); LunarMonth m = LunarMonth.fromYm(2022, 1);
Assert.assertEquals("二黒土天璇", m.getNineStar().toString()); Assert.assertEquals("二黑土天璇", m.getNineStar().toString());
} }
@Test @Test
@@ -77,4 +77,12 @@ public class NineStarTest {
Assert.assertEquals("七赤金摇光", d.getTimeNineStar().toString()); Assert.assertEquals("七赤金摇光", d.getTimeNineStar().toString());
} }
@Test
public void test12() {
LunarMonth m = LunarMonth.fromYm(2024, 11);
Assert.assertEquals("四绿木天权", m.getNineStar().toString());
m = LunarMonth.fromYm(2024, 12);
Assert.assertEquals("三碧木天玑", m.getNineStar().toString());
}
} }