1
0
mirror of synced 2026-10-08 16:04:11 +08:00

Compare commits

..

3 Commits

Author SHA1 Message Date
6tail
a17402241a v1.3.9 修复星期错误的问题。 2023-11-09 11:58:29 +08:00
6tail
9e36b0739c v1.3.8 修复星期错误的问题;修正逐日胎神数据。 2023-11-07 21:22:16 +08:00
6tail
1c72c5769e v1.3.7 更新2024年法定假日数据;十神优化。 2023-10-26 11:21:09 +08:00
13 changed files with 242 additions and 317 deletions

View File

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

View File

@@ -7,7 +7,7 @@
<groupId>cn.6tail</groupId>
<artifactId>lunar</artifactId>
<packaging>jar</packaging>
<version>1.3.6</version>
<version>1.3.9</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

@@ -152,7 +152,7 @@ public class EightChar {
List<String> hideGan = LunarUtil.ZHI_HIDE_GAN.get(zhi);
List<String> l = new ArrayList<String>(hideGan.size());
for (String gan : hideGan) {
l.add(LunarUtil.SHI_SHEN_ZHI.get(getDayGan() + zhi + gan));
l.add(LunarUtil.SHI_SHEN_ZHI.get(getDayGan() + gan));
}
return l;
}

View File

@@ -2944,11 +2944,7 @@ public class Lunar {
days = current.subtract(start);
Solar liQiuSolar = Solar.fromYmd(liQiu.getYear(), liQiu.getMonth(), liQiu.getDay());
// 末伏
if (!liQiuSolar.isAfter(start)) {
if (days < 10) {
return new Fu("末伏", days + 1);
}
} else {
if (liQiuSolar.isAfter(start)) {
// 中伏
if (days < 10) {
return new Fu("中伏", days + 11);
@@ -2956,9 +2952,9 @@ public class Lunar {
// 末伏第1天
start = start.next(10);
days = current.subtract(start);
if (days < 10) {
return new Fu("末伏", days + 1);
}
}
if (days < 10) {
return new Fu("末伏", days + 1);
}
return null;
}

View File

@@ -358,26 +358,7 @@ public class Solar {
* @return 0123456
*/
public int getWeek() {
Solar start = fromYmd(1582, 10, 15);
int y = year;
int m = month;
int d = day;
Solar current = fromYmd(y, m, d);
// 蔡勒公式
if (m < 3) {
m += 12;
y--;
}
int c = y / 100;
y = y - c * 100;
int x = y + y / 4 + c / 4 - 2 * c;
int w;
if (current.isBefore(start)) {
w = (x + 13 * (m + 1) / 5 + d + 2) % 7;
} else {
w = (x + 26 * (m + 1) / 10 + d - 1) % 7;
}
return (w + 7) % 7;
return ((int)(getJulianDay() + 0.5) + 7000001) % 7;
}
/**

File diff suppressed because one or more lines are too long

View File

@@ -42,7 +42,14 @@ public class LunarUtil{
/** 地支方位 */
public static final String[] POSITION_ZHI = {"坎","中","震","震","中","离","离","中","兑","兑","中","坎"};
/** 逐日胎神方位 */
public static final String[] POSITION_TAI_DAY = {"占门碓 外东南","碓磨厕 外东南","厨灶炉 外正南","仓库门 外正南","房床栖 外正南","占门床 外正南","占碓磨 外正南","厕灶厨 外西南","仓库炉 外西南","房床门 外西南","门碓栖 外西南","碓磨床 外西南","厨灶碓 外西南","仓库厕 外正西","房床炉 外正西","占大门 外正西","碓磨栖 外正西","厨房床 外正西","仓库碓 外西北","房床厕 外西北","占门炉 外西北","门碓磨 外西北","厨灶栖 外西北","仓库床 外西北","房床碓 外正北","占门厕 外正北","碓磨炉 外正北","厨灶门 外正北","仓库栖 外正北","占房床 房内北","占门碓 房内北","碓磨厕 房内北","厨灶炉 房内北","门仓库 房内北","床房栖 房内中","占门床 房内中","占碓磨 房内南","厨磨厕 房内南","仓库炉 房内南","房床门 房内西","门碓栖 房内东","碓磨床 房内东","厨灶碓 房内东","仓库厕 房内东","房床炉 房内中","占大门 外东北","碓磨栖 外东北","厨灶床 外东北","仓库碓 外东北","房床厕 外东北","占门炉 外东北","门碓磨 外正东","厨灶栖 外正东","仓库床 外正东","房床碓 外正东","占门厕 外正东","碓磨炉 外东南","厨灶门 外东南","仓库栖 外东南","占房床 外东南"};
public static final String[] POSITION_TAI_DAY = {
"占门碓 外东南","碓磨厕 外东南","厨灶炉 外正南","仓库门 外正南","房床栖 外正南","占门床 外正南","占碓磨 外正南","厨灶厕 外西南","仓库炉 外西南","房床门 外西南",
"占门栖 外西南","碓磨床 外西南","厨灶碓 外西南","仓库厕 外正西","房床炉 外正西","占大门 外正西","碓磨栖 外正西","厨灶床 外正西","仓库碓 外西北","房床厕 外西北",
"占门炉 外西北","碓磨门 外西北","厨灶栖 外西北","仓库床 外西北","房床碓 外正北","占门厕 外正北","碓磨炉 外正北","厨灶门 外正北","仓库栖 外正北","占房床 房内北",
"占门碓 房内北","碓磨厕 房内北","厨灶炉 房内北","仓库门 房内北","房床栖 房内中","占门床 房内中","占碓磨 房内南","厨灶厕 房内南","仓库炉 房内南","房床门 房内西",
"占门栖 房内东","碓磨床 房内东","厨灶碓 房内东","仓库厕 房内东","房床炉 房内中","占大门 外东北","碓磨栖 外东北","厨灶床 外东北","仓库碓 外东北","房床厕 外东北",
"占门炉 外东北","碓磨门 外正东","厨灶栖 外正东","仓库床 外正东","房床碓 外正东","占门厕 外正东","碓磨炉 外东南","厨灶门 外东南","仓库栖 外东南","占房床 外东南"
};
/** 逐月胎神方位 */
public static final String[] POSITION_TAI_MONTH = {"占房床","占户窗","占门堂","占厨灶","占房床","占床仓","占碓磨","占厕户","占门房","占房床","占灶炉","占房床"};
/** 地支 */
@@ -306,7 +313,7 @@ public class LunarUtil{
put("轸","吉");
}
};
/** 星宿对应吉凶 */
/** 星宿歌诀 */
public static final Map<String,String> XIU_SONG = new HashMap<String,String>(){
private static final long serialVersionUID = -1;
{
@@ -709,286 +716,106 @@ public class LunarUtil{
public static final Map<String,String> SHI_SHEN_ZHI = new HashMap<String,String>() {
private static final long serialVersionUID = -1;
{
put("甲子癸","正印");
put("甲丑癸","正印");
put("甲丑己","正财");
put("甲丑辛","正官");
put("甲寅丙","食神");
put("甲寅甲","比肩");
put("甲寅戊","偏财");
put("甲卯乙","劫财");
put("甲辰乙","劫财");
put("甲辰戊","偏财");
put("甲辰癸","正印");
put("甲巳戊","偏财");
put("甲巳丙","食神");
put("甲巳庚","七杀");
put("甲午丁","伤官");
put("甲午己","正财");
put("甲未乙","劫财");
put("甲未己","正财");
put("甲未丁","伤官");
put("甲申戊","偏财");
put("甲申庚","七杀");
put("甲申壬","偏印");
put("甲酉辛","正官");
put("甲戌辛","正官");
put("甲戌戊","偏财");
put("甲戌丁","伤官");
put("甲亥壬","偏印");
put("甲亥甲","比肩");
put("乙子癸","偏印");
put("乙丑癸","偏印");
put("乙丑己","偏财");
put("乙丑辛","七杀");
put("乙寅丙","伤官");
put("乙寅甲","劫财");
put("乙寅戊","正财");
put("乙卯乙","比肩");
put("乙辰乙","比肩");
put("乙辰戊","正财");
put("乙辰癸","偏印");
put("乙巳戊","正财");
put("乙巳丙","伤官");
put("乙巳庚","正官");
put("乙午丁","食神");
put("乙午己","偏财");
put("乙未乙","比肩");
put("乙未己","偏财");
put("乙未丁","食神");
put("乙申戊","正财");
put("乙申庚","正官");
put("乙申壬","正印");
put("乙酉辛","七杀");
put("乙戌辛","七杀");
put("乙戌戊","正财");
put("乙戌丁","食神");
put("乙亥壬","正印");
put("乙亥甲","劫财");
put("丙子癸","正官");
put("丙丑癸","正官");
put("丙丑己","伤官");
put("丙丑辛","正财");
put("丙寅丙","比肩");
put("丙寅甲","偏印");
put("丙寅戊","食神");
put("丙卯乙","正印");
put("丙辰乙","正印");
put("丙辰戊","食神");
put("丙辰癸","正官");
put("丙巳戊","食神");
put("丙巳丙","比肩");
put("丙巳庚","偏财");
put("丙午丁","劫财");
put("丙午己","伤官");
put("丙未乙","正印");
put("丙未己","伤官");
put("丙未丁","劫财");
put("丙申戊","食神");
put("丙申庚","偏财");
put("丙申壬","七杀");
put("丙酉辛","正财");
put("丙戌辛","正财");
put("丙戌戊","食神");
put("丙戌丁","劫财");
put("丙亥壬","七杀");
put("丙亥甲","偏印");
put("丁子癸","七杀");
put("丁丑癸","七杀");
put("丁丑己","食神");
put("丁丑辛","偏财");
put("丁寅丙","劫财");
put("丁寅甲","正印");
put("丁寅戊","伤官");
put("丁卯乙","偏印");
put("丁辰乙","偏印");
put("丁辰戊","伤官");
put("丁辰癸","七杀");
put("丁巳戊","伤官");
put("丁巳丙","劫财");
put("丁巳庚","正财");
put("丁午丁","比肩");
put("丁午己","食神");
put("丁未乙","偏印");
put("丁未己","食神");
put("丁未丁","比肩");
put("丁申戊","伤官");
put("丁申庚","正财");
put("丁申壬","正官");
put("丁酉辛","偏财");
put("丁戌辛","偏财");
put("丁戌戊","伤官");
put("丁戌丁","比肩");
put("丁亥壬","正官");
put("丁亥甲","正印");
put("戊子癸","正财");
put("戊丑癸","正财");
put("戊丑己","劫财");
put("戊丑辛","伤官");
put("戊寅丙","偏印");
put("戊寅甲","七杀");
put("戊寅戊","比肩");
put("戊卯乙","正官");
put("戊辰乙","正官");
put("戊辰戊","比肩");
put("戊辰癸","正财");
put("戊巳戊","比肩");
put("戊巳丙","偏印");
put("戊巳庚","食神");
put("戊午丁","正印");
put("戊午己","劫财");
put("戊未乙","正官");
put("戊未己","劫财");
put("戊未丁","正印");
put("戊申戊","比肩");
put("戊申庚","食神");
put("戊申壬","偏财");
put("戊酉辛","伤官");
put("戊戌辛","伤官");
put("戊戌戊","比肩");
put("戊戌丁","正印");
put("戊亥壬","偏财");
put("戊亥甲","七杀");
put("己子癸","偏财");
put("己丑癸","偏财");
put("己丑己","比肩");
put("己丑辛","食神");
put("己寅丙","正印");
put("己寅甲","正官");
put("己寅戊","劫财");
put("己卯乙","七杀");
put("己辰乙","七杀");
put("己辰戊","劫财");
put("己辰癸","偏财");
put("己巳戊","劫财");
put("己巳丙","正印");
put("己巳庚","伤官");
put("己午丁","偏印");
put("己午己","比肩");
put("己未乙","七杀");
put("己未己","比肩");
put("己未丁","偏印");
put("己申戊","劫财");
put("己申庚","伤官");
put("己申壬","正财");
put("己酉辛","食神");
put("己戌辛","食神");
put("己戌戊","劫财");
put("己戌丁","偏印");
put("己亥壬","正财");
put("己亥甲","正官");
put("庚子癸","伤官");
put("庚丑癸","伤官");
put("庚丑己","正印");
put("庚丑辛","劫财");
put("庚寅丙","七杀");
put("庚寅甲","偏财");
put("庚寅戊","偏印");
put("庚卯乙","正财");
put("庚辰乙","正财");
put("庚辰戊","偏印");
put("庚辰癸","伤官");
put("庚巳戊","偏印");
put("庚巳丙","七杀");
put("庚巳庚","比肩");
put("庚午丁","正官");
put("庚午己","正印");
put("庚未乙","正财");
put("庚未己","正印");
put("庚未丁","正官");
put("庚申戊","偏印");
put("庚申庚","比肩");
put("庚申壬","食神");
put("庚酉辛","劫财");
put("庚戌辛","劫财");
put("庚戌戊","偏印");
put("庚戌丁","正官");
put("庚亥壬","食神");
put("庚亥甲","偏财");
put("辛子癸","食神");
put("辛丑癸","食神");
put("辛丑己","偏印");
put("辛丑辛","比肩");
put("辛寅丙","正官");
put("辛寅甲","正财");
put("辛寅戊","正印");
put("辛卯乙","偏财");
put("辛辰乙","偏财");
put("辛辰戊","正印");
put("辛辰癸","食神");
put("辛巳戊","正印");
put("辛巳丙","正官");
put("辛巳庚","劫财");
put("辛午丁","七杀");
put("辛午己","偏印");
put("辛未乙","偏财");
put("辛未己","偏印");
put("辛未丁","七杀");
put("辛申戊","正印");
put("辛申庚","劫财");
put("辛申壬","伤官");
put("辛酉辛","比肩");
put("辛戌辛","比肩");
put("辛戌戊","正印");
put("辛戌丁","七杀");
put("辛亥壬","伤官");
put("辛亥甲","正财");
put("壬子癸","劫财");
put("壬丑癸","劫财");
put("壬丑己","正官");
put("壬丑辛","正印");
put("壬寅丙","偏财");
put("壬寅甲","食神");
put("壬寅戊","七杀");
put("壬卯乙","伤官");
put("壬辰乙","伤官");
put("壬辰戊","七杀");
put("壬辰癸","劫财");
put("壬巳戊","七杀");
put("壬巳丙","偏财");
put("壬巳庚","偏印");
put("壬午丁","正财");
put("壬午己","正官");
put("壬未乙","伤官");
put("壬未己","正官");
put("壬未丁","正财");
put("壬申戊","七杀");
put("壬申庚","偏印");
put("壬申壬","比肩");
put("壬酉辛","正印");
put("壬戌辛","正印");
put("壬戌戊","七杀");
put("壬戌丁","正财");
put("壬亥壬","比肩");
put("壬亥甲","食神");
put("癸子癸","比肩");
put("癸丑癸","比肩");
put("癸丑己","七杀");
put("癸丑辛","偏印");
put("癸寅丙","正财");
put("癸寅甲","伤官");
put("癸寅戊","正官");
put("癸卯乙","食神");
put("癸辰乙","食神");
put("癸辰戊","正官");
put("癸辰癸","比肩");
put("癸巳戊","正官");
put("癸巳丙","正财");
put("癸巳庚","正印");
put("癸午丁","偏财");
put("癸午己","七杀");
put("癸未乙","食神");
put("癸未己","七杀");
put("癸未丁","偏财");
put("癸申戊","正官");
put("癸申庚","正印");
put("癸申壬","劫财");
put("癸酉辛","偏印");
put("癸戌辛","偏印");
put("癸戌戊","正官");
put("癸戌丁","偏财");
put("癸亥壬","劫财");
put("癸亥甲","伤官");
put("甲癸","正印");
put("甲己","正财");
put("甲辛","正官");
put("甲丙","食神");
put("甲甲","比肩");
put("甲戊","偏财");
put("甲乙","劫财");
put("甲庚","七杀");
put("甲丁","伤官");
put("甲壬","偏印");
put("乙癸","偏印");
put("乙己","偏财");
put("乙辛","七杀");
put("乙丙","伤官");
put("乙甲","劫财");
put("乙戊","正财");
put("乙乙","比肩");
put("乙庚","正官");
put("乙丁","食神");
put("乙壬","正印");
put("丙癸","正官");
put("丙己","伤官");
put("丙辛","正财");
put("丙丙","比肩");
put("丙甲","偏印");
put("丙戊","食神");
put("丙乙","正印");
put("丙庚","偏财");
put("丙丁","劫财");
put("丙壬","七杀");
put("丁癸","七杀");
put("丁己","食神");
put("丁辛","偏财");
put("丁丙","劫财");
put("丁甲","正印");
put("丁戊","伤官");
put("丁乙","偏印");
put("丁庚","正财");
put("丁丁","比肩");
put("丁壬","正官");
put("戊癸","正财");
put("戊己","劫财");
put("戊辛","伤官");
put("戊丙","偏印");
put("戊甲","七杀");
put("戊戊","比肩");
put("戊乙","正官");
put("戊庚","食神");
put("戊丁","正印");
put("戊壬","偏财");
put("己癸","偏财");
put("己己","比肩");
put("己辛","食神");
put("己丙","正印");
put("己甲","正官");
put("己戊","劫财");
put("己乙","七杀");
put("己庚","伤官");
put("己丁","偏印");
put("己壬","正财");
put("庚癸","伤官");
put("庚己","正印");
put("庚辛","劫财");
put("庚丙","七杀");
put("庚甲","偏财");
put("庚戊","偏印");
put("庚乙","正财");
put("庚庚","比肩");
put("庚丁","正官");
put("庚壬","食神");
put("辛癸","食神");
put("辛己","偏印");
put("辛辛","比肩");
put("辛丙","正官");
put("辛甲","正财");
put("辛戊","正印");
put("辛乙","偏财");
put("辛庚","劫财");
put("辛丁","七杀");
put("辛壬","伤官");
put("壬癸","劫财");
put("壬己","正官");
put("壬辛","正印");
put("壬丙","偏财");
put("壬甲","食神");
put("壬戊","七杀");
put("壬乙","伤官");
put("壬庚","偏印");
put("壬丁","正财");
put("壬壬","比肩");
put("癸癸","比肩");
put("癸己","七杀");
put("癸辛","偏印");
put("癸丙","正财");
put("癸甲","伤官");
put("癸戊","正官");
put("癸乙","食神");
put("癸庚","正印");
put("癸丁","偏财");
put("癸壬","劫财");
}
};

View File

@@ -77,7 +77,7 @@ public class BaZiTestNew {
public void test7() {
Solar solar = new Solar(2020, 5, 26, 23, 43, 0);
Lunar lunar = solar.getLunar();
//庚子, 辛巳, 庚午, 丙子]
// [庚子, 辛巳, 庚午, 丙子]
System.out.println(lunar.getEightChar());
}

View File

@@ -53,4 +53,10 @@ public class LunarMonthTest {
Assert.assertEquals("壬寅", month.getGanZhi());
}
@Test
public void test6(){
LunarMonth month = LunarMonth.fromYm(2023, 9);
Assert.assertEquals("癸亥", month.getGanZhi());
}
}

View File

@@ -377,7 +377,7 @@ public class LunarTest {
public void test52() {
Solar solar = Solar.fromYmd(2011, 11, 12);
Lunar lunar = solar.getLunar();
Assert.assertEquals("厕灶厨 外西南", lunar.getDayPositionTai());
Assert.assertEquals("厨灶厕 外西南", lunar.getDayPositionTai());
}
@Test
@@ -645,4 +645,10 @@ public class LunarTest {
Assert.assertEquals("九一七年冬月十六", lunar.toString());
}
@Test
public void test95() {
Lunar lunar = Solar.fromYmd(2023, 10, 30).getLunar();
Assert.assertEquals("闭", lunar.getZhiXing());
}
}

View File

@@ -1,6 +1,8 @@
package test;
import com.nlf.calendar.Lunar;
import com.nlf.calendar.LunarMonth;
import com.nlf.calendar.LunarYear;
import com.nlf.calendar.Solar;
import org.junit.Assert;
import org.junit.Test;
@@ -10,17 +12,69 @@ public class NineStarTest {
public void test1() {
Lunar lunar = Solar.fromYmd(1985, 2, 19).getLunar();
Assert.assertEquals("六", lunar.getYearNineStar().getNumber());
Assert.assertEquals("五黄土玉衡", lunar.getDayNineStar().toString());
}
@Test
public void test2() {
Lunar lunar = Lunar.fromYmd(2022, 1, 1);
Assert.assertEquals("六白金开阳", lunar.getYearNineStar().toString());
Assert.assertEquals("四绿木天权", lunar.getDayNineStar().toString());
}
@Test
public void test3() {
Lunar lunar = Lunar.fromYmd(2033, 1, 1);
Assert.assertEquals("四绿木天权", lunar.getYearNineStar().toString());
Assert.assertEquals("一白水天枢", lunar.getDayNineStar().toString());
}
@Test
public void test4() {
LunarYear y = LunarYear.fromYear(1985);
Assert.assertEquals("六白金开阳", y.getNineStar().toString());
}
@Test
public void test5() {
LunarYear y = LunarYear.fromYear(2022);
Assert.assertEquals("五黄土玉衡", y.getNineStar().toString());
}
@Test
public void test6() {
LunarYear y = LunarYear.fromYear(2033);
Assert.assertEquals("三碧木天玑", y.getNineStar().toString());
}
@Test
public void test7() {
LunarMonth m = LunarMonth.fromYm(1985, 2);
Assert.assertEquals("四绿木天权", m.getNineStar().toString());
}
@Test
public void test8() {
LunarMonth m = LunarMonth.fromYm(2022, 1);
Assert.assertEquals("二黒土天璇", m.getNineStar().toString());
}
@Test
public void test9() {
LunarMonth m = LunarMonth.fromYm(2033, 1);
Assert.assertEquals("五黄土玉衡", m.getNineStar().toString());
}
@Test
public void test10() {
Lunar d = Lunar.fromYmdHms(2033, 1, 1, 12, 0,0);
Assert.assertEquals("七赤金摇光", d.getTimeNineStar().toString());
}
@Test
public void test11() {
Lunar d = Lunar.fromYmdHms(2011, 5, 3, 23, 0,0);
Assert.assertEquals("七赤金摇光", d.getTimeNineStar().toString());
}
}

View File

@@ -54,4 +54,59 @@ public class WeekTest {
Solar solar = Solar.fromYmd(1582, 10, 15);
Assert.assertEquals(5, solar.getWeek());
}
@Test
public void test3(){
Solar solar = Solar.fromYmd(1129, 11, 17);
Assert.assertEquals(0, solar.getWeek());
}
@Test
public void test4(){
Solar solar = Solar.fromYmd(1129, 11, 1);
Assert.assertEquals(5, solar.getWeek());
}
@Test
public void test5(){
Solar solar = Solar.fromYmd(8, 11, 1);
Assert.assertEquals(4, solar.getWeek());
}
@Test
public void test6(){
Solar solar = Solar.fromYmd(1582, 9, 30);
Assert.assertEquals(0, solar.getWeek());
}
@Test
public void test7(){
Solar solar = Solar.fromYmd(1582, 1, 1);
Assert.assertEquals(1, solar.getWeek());
}
@Test
public void test8(){
Solar solar = Solar.fromYmd(1500, 2, 29);
Assert.assertEquals(6, solar.getWeek());
}
@Test
public void test9(){
Solar solar = Solar.fromYmd(9865, 7, 26);
Assert.assertEquals(3, solar.getWeek());
}
@Test
public void test10(){
Assert.assertEquals(6, Solar.fromYmd(1961, 9, 30).getWeek());
Assert.assertEquals(6, Solar.fromYmdHms(1961, 9, 30, 23, 59, 59).getWeek());
Assert.assertEquals(6, Solar.fromYmdHms(1961, 9, 30, 20, 0, 0).getWeek());
}
@Test
public void test11(){
Assert.assertEquals(3, Solar.fromYmdHms(2021, 9, 15, 20, 0, 0).getWeek());
}
}