diff --git a/README.md b/README.md
index c79a4ae..2e29092 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,7 @@ lunar是一款无第三方依赖的公历(阳历)、农历(阴历、老黄历)
cn.6tail
lunar
- 1.2.14
+ 1.2.15
```
@@ -57,6 +57,8 @@ lunar是一款无第三方依赖的公历(阳历)、农历(阴历、老黄历)
## 更新日志
+v1.2.15 南京大XX纪念日更改为国家公祭日;新增初候、二候、三候;新增三元九运;新增道历戊日。
+
v1.2.14 佛历新增27宿;修复宜忌重复的问题;修复获取气时缺冬至的问题。
v1.2.13 新增道历Tao。
diff --git a/README_EN.md b/README_EN.md
index f1b1dee..5cfc94c 100644
--- a/README_EN.md
+++ b/README_EN.md
@@ -12,7 +12,7 @@ lunar is a calendar library for Solar and Chinese Lunar.
cn.6tail
lunar
- 1.2.13
+ 1.2.15
```
diff --git a/pom.xml b/pom.xml
index e888ffc..90caefa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
cn.6tail
lunar
jar
- 1.2.14
+ 1.2.15
${project.groupId}:${project.artifactId}
https://github.com/6tail/lunar-java
a calendar library for Solar and Chinese Lunar
diff --git a/src/main/java/com/nlf/calendar/Lunar.java b/src/main/java/com/nlf/calendar/Lunar.java
index 5e6aad4..0ebf06c 100644
--- a/src/main/java/com/nlf/calendar/Lunar.java
+++ b/src/main/java/com/nlf/calendar/Lunar.java
@@ -1954,12 +1954,22 @@ public class Lunar {
* @return 节气
*/
public JieQi getNextJie() {
+ return getNextJie(false);
+ }
+
+ /**
+ * 获取下一节令(顺推的第一个节令)
+ *
+ * @param wholeDay 是否按天计
+ * @return 节气
+ */
+ public JieQi getNextJie(boolean wholeDay) {
int l = JIE_QI_IN_USE.length/2;
String[] conditions = new String[l];
for(int i=0;i filters = new HashSet();
@@ -2037,7 +2098,7 @@ public class Lunar {
Collections.addAll(filters, conditions);
}
boolean filter = !filters.isEmpty();
- String today = solar.toYmdHms();
+ String today = wholeDay ? solar.toYmd() : solar.toYmdHms();
for (Map.Entry entry : jieQi.entrySet()) {
String jq = convertJieQi(entry.getKey());
if (filter) {
@@ -2046,22 +2107,34 @@ public class Lunar {
}
}
Solar solar = entry.getValue();
- String day = solar.toYmdHms();
+ String day = wholeDay ? solar.toYmd() : solar.toYmdHms();
if (forward) {
if (day.compareTo(today) < 0) {
continue;
}
- if (null == near || day.compareTo(near.toYmdHms()) < 0) {
+ if (null == near) {
name = jq;
near = solar;
+ } else {
+ String nearDay = wholeDay ? near.toYmd() : near.toYmdHms();
+ if (day.compareTo(nearDay) < 0) {
+ name = jq;
+ near = solar;
+ }
}
} else {
if (day.compareTo(today) > 0) {
continue;
}
- if (null == near || day.compareTo(near.toYmdHms()) > 0) {
+ if (null == near) {
name = jq;
near = solar;
+ } else {
+ String nearDay = wholeDay ? near.toYmd() : near.toYmdHms();
+ if (day.compareTo(nearDay) > 0) {
+ name = jq;
+ near = solar;
+ }
}
}
}
@@ -2626,7 +2699,7 @@ public class Lunar {
*/
@SuppressWarnings("MagicConstant")
public String getWuHou() {
- JieQi jieQi = getPrevJieQi();
+ JieQi jieQi = getPrevJieQi(true);
String name = jieQi.getName();
int offset = 0;
for (int i = 0, j = JIE_QI.length; i < j; i++) {
@@ -2644,6 +2717,21 @@ public class Lunar {
return LunarUtil.WU_HOU[(offset * 3 + days / 5) % LunarUtil.WU_HOU.length];
}
+ /**
+ * 获取候
+ *
+ * @return 候
+ */
+ 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 = (int) ((currentCalendar.getTimeInMillis() - startCalendar.getTimeInMillis()) / MS_PER_DAY);
+ return String.format("%s %s", name, LunarUtil.HOU[(days / 5) % LunarUtil.HOU.length]);
+ }
+
/**
* 获取日禄
* @return 日禄
diff --git a/src/main/java/com/nlf/calendar/LunarYear.java b/src/main/java/com/nlf/calendar/LunarYear.java
index a467bca..c4f590a 100644
--- a/src/main/java/com/nlf/calendar/LunarYear.java
+++ b/src/main/java/com/nlf/calendar/LunarYear.java
@@ -15,6 +15,16 @@ import java.util.Map;
*/
public class LunarYear {
+ /**
+ * 元
+ */
+ private static final String[] YUAN = {"下", "上", "中"};
+
+ /**
+ * 运
+ */
+ private static final String[] YUN = {"七", "八", "九", "一", "二", "三", "四", "五", "六"};
+
/**
* 闰冬月年份
*/
@@ -264,6 +274,24 @@ public class LunarYear {
return LunarUtil.NUMBER[offset+1] + "日得金";
}
+ /**
+ * 获取三元
+ *
+ * @return 元
+ */
+ public String getYuan() {
+ return YUAN[((year + 2696) / 60) % 3] + "元";
+ }
+
+ /**
+ * 获取九运
+ *
+ * @return 运
+ */
+ public String getYun() {
+ return YUN[((year + 2696) / 20) % 9] + "运";
+ }
+
@Override
public String toString() {
return year + "";
diff --git a/src/main/java/com/nlf/calendar/Tao.java b/src/main/java/com/nlf/calendar/Tao.java
index 22f0926..e042b78 100644
--- a/src/main/java/com/nlf/calendar/Tao.java
+++ b/src/main/java/com/nlf/calendar/Tao.java
@@ -149,6 +149,33 @@ public class Tao {
return TaoUtil.BA_HUI.containsKey(lunar.getDayInGanZhi());
}
+ /**
+ * 是否明戊日
+ *
+ * @return true/false
+ */
+ public boolean isDayMingWu() {
+ return "戊".equals(lunar.getDayGan());
+ }
+
+ /**
+ * 是否暗戊日
+ *
+ * @return true/false
+ */
+ public boolean isDayAnWu() {
+ return lunar.getDayZhi().equals(TaoUtil.AN_WU[Math.abs(getMonth()) - 1]);
+ }
+
+ /**
+ * 是否戊日
+ *
+ * @return true/false
+ */
+ public boolean isDayWu() {
+ return isDayMingWu() || isDayAnWu();
+ }
+
@Override
public String toString() {
return String.format("%s年%s月%s", getYearInChinese(), getMonthInChinese(), getDayInChinese());
diff --git a/src/main/java/com/nlf/calendar/util/LunarUtil.java b/src/main/java/com/nlf/calendar/util/LunarUtil.java
index eb6131a..a04f889 100644
--- a/src/main/java/com/nlf/calendar/util/LunarUtil.java
+++ b/src/main/java/com/nlf/calendar/util/LunarUtil.java
@@ -17,6 +17,8 @@ public class LunarUtil{
public static final String[] XUN_KONG = {"戌亥","申酉","午未","辰巳","寅卯","子丑"};
/** 六曜 */
public static final String[] LIU_YAO = {"先胜","友引","先负","佛灭","大安","赤口"};
+ /** 候 */
+ public static final String[] HOU = {"初候", "二候", "三候"};
/** 物候 */
public static final String[] WU_HOU = {"蚯蚓结","麋角解","水泉动","雁北乡","鹊始巢","雉始雊","鸡始乳","征鸟厉疾","水泽腹坚","东风解冻","蛰虫始振","鱼陟负冰","獭祭鱼","候雁北","草木萌动","桃始华","仓庚鸣","鹰化为鸠","玄鸟至","雷乃发声","始电","桐始华","田鼠化为鴽","虹始见","萍始生","鸣鸠拂奇羽","戴胜降于桑","蝼蝈鸣","蚯蚓出","王瓜生","苦菜秀","靡草死","麦秋至","螳螂生","鵙始鸣","反舌无声","鹿角解","蜩始鸣","半夏生","温风至","蟋蟀居壁","鹰始挚","腐草为萤","土润溽暑","大雨行时","凉风至","白露降","寒蝉鸣","鹰乃祭鸟","天地始肃","禾乃登","鸿雁来","玄鸟归","群鸟养羞","雷始收声","蛰虫坯户","水始涸","鸿雁来宾","雀入大水为蛤","菊有黄花","豺乃祭兽","草木黄落","蛰虫咸俯","水始冰","地始冻","雉入大水为蜃","虹藏不见","天气上升地气下降","闭塞而成冬","鹖鴠不鸣","虎始交","荔挺出"};
/** 天干 */
diff --git a/src/main/java/com/nlf/calendar/util/SolarUtil.java b/src/main/java/com/nlf/calendar/util/SolarUtil.java
index 5c712e8..6d360ef 100644
--- a/src/main/java/com/nlf/calendar/util/SolarUtil.java
+++ b/src/main/java/com/nlf/calendar/util/SolarUtil.java
@@ -128,7 +128,7 @@ public class SolarUtil {
put("11-28", Collections.nCopies(1, "恩格斯诞辰纪念日"));
put("12-1", Collections.nCopies(1, "世界艾滋病日"));
put("12-12", Collections.nCopies(1, "西安事变纪念日"));
- put("12-13", Collections.nCopies(1, "南京大屠杀纪念日"));
+ put("12-13", Collections.nCopies(1, "国家公祭日"));
put("12-26", Collections.nCopies(1, "毛泽东诞辰纪念日"));
}
};
diff --git a/src/main/java/com/nlf/calendar/util/TaoUtil.java b/src/main/java/com/nlf/calendar/util/TaoUtil.java
index 4ec7337..63537c7 100644
--- a/src/main/java/com/nlf/calendar/util/TaoUtil.java
+++ b/src/main/java/com/nlf/calendar/util/TaoUtil.java
@@ -169,4 +169,9 @@ public class TaoUtil {
*/
public static final String[] WU_LA = {"1-1", "5-5", "7-7", "10-1", "12-8"};
+ /**
+ * 暗戊
+ */
+ public static final String[] AN_WU = {"未", "戌", "辰", "寅", "午", "子", "酉", "申", "巳", "亥", "卯", "丑"};
+
}
diff --git a/src/test/java/test/WuHouTest.java b/src/test/java/test/WuHouTest.java
index 650ec6c..4f86508 100644
--- a/src/test/java/test/WuHouTest.java
+++ b/src/test/java/test/WuHouTest.java
@@ -75,4 +75,32 @@ public class WuHouTest {
Assert.assertEquals(solar.toString(),"蚯蚓结",lunar.getWuHou());
}
+ @Test
+ public void test10(){
+ Solar solar = new Solar(2021,12,21);
+ Lunar lunar = solar.getLunar();
+ Assert.assertEquals(solar.toString(),"冬至 初候",lunar.getHou());
+ }
+
+ @Test
+ public void test11(){
+ Solar solar = new Solar(2021,12,26);
+ Lunar lunar = solar.getLunar();
+ Assert.assertEquals(solar.toString(),"冬至 二候",lunar.getHou());
+ }
+
+ @Test
+ public void test12(){
+ Solar solar = new Solar(2021,12,31);
+ Lunar lunar = solar.getLunar();
+ Assert.assertEquals(solar.toString(),"冬至 三候",lunar.getHou());
+ }
+
+ @Test
+ public void test13(){
+ Solar solar = new Solar(2022,1,5);
+ Lunar lunar = solar.getLunar();
+ Assert.assertEquals(solar.toString(),"小寒 初候",lunar.getHou());
+ }
+
}
diff --git a/src/test/java/test/YearTest.java b/src/test/java/test/YearTest.java
index 34ab75a..3341af5 100644
--- a/src/test/java/test/YearTest.java
+++ b/src/test/java/test/YearTest.java
@@ -61,4 +61,82 @@ public class YearTest {
Assert.assertEquals("三日得金",year.getDeJin());
}
+ @Test
+ public void test5(){
+ LunarYear year = new LunarYear(1864);
+ Assert.assertEquals("上元",year.getYuan());
+ }
+
+ @Test
+ public void test6(){
+ LunarYear year = new LunarYear(1923);
+ Assert.assertEquals("上元",year.getYuan());
+ }
+
+ @Test
+ public void test7(){
+ LunarYear year = new LunarYear(1924);
+ Assert.assertEquals("中元",year.getYuan());
+ }
+
+ @Test
+ public void test8(){
+ LunarYear year = new LunarYear(1983);
+ Assert.assertEquals("中元",year.getYuan());
+ }
+
+ @Test
+ public void test9(){
+ LunarYear year = new LunarYear(1984);
+ Assert.assertEquals("下元",year.getYuan());
+ }
+
+ @Test
+ public void test10(){
+ LunarYear year = new LunarYear(2043);
+ Assert.assertEquals("下元",year.getYuan());
+ }
+
+ @Test
+ public void test11(){
+ LunarYear year = new LunarYear(1864);
+ Assert.assertEquals("一运",year.getYun());
+ }
+
+ @Test
+ public void test12(){
+ LunarYear year = new LunarYear(1883);
+ Assert.assertEquals("一运",year.getYun());
+ }
+
+ @Test
+ public void test13(){
+ LunarYear year = new LunarYear(1884);
+ Assert.assertEquals("二运",year.getYun());
+ }
+
+ @Test
+ public void test14(){
+ LunarYear year = new LunarYear(1903);
+ Assert.assertEquals("二运",year.getYun());
+ }
+
+ @Test
+ public void test15(){
+ LunarYear year = new LunarYear(1904);
+ Assert.assertEquals("三运",year.getYun());
+ }
+
+ @Test
+ public void test16(){
+ LunarYear year = new LunarYear(1923);
+ Assert.assertEquals("三运",year.getYun());
+ }
+
+ @Test
+ public void test17(){
+ LunarYear year = new LunarYear(2004);
+ Assert.assertEquals("八运",year.getYun());
+ }
+
}