diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/date/chinese/ChineseDate.java b/hutool-core/src/main/java/org/dromara/hutool/core/date/chinese/ChineseDate.java
index 6f23046fd..5bd8a746e 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/date/chinese/ChineseDate.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/date/chinese/ChineseDate.java
@@ -377,6 +377,33 @@ public class ChineseDate {
return null;
}
+ /**
+ *获取标准化农历日期,默认Mix
+ *
+ * @return 获取的标准化农历日期
+ */
+ public String getNormalizedDate() {
+ return getNormalizedDate("Mix");
+ }
+
+ /**
+ * 获取标准化农历日期
+ * 支持格式
+ *
GSS 干支纪年 数序纪月 数序纪日
+ * - XSS 生肖纪年 数序纪月 数序纪日
+ * - GSG 干支纪年 数序纪月 干支纪日
+ * - Mix 农历年年首所在的公历年份 干支纪年 数序纪月 数序纪日
+ *
+ * @param format 选择输出的标准格式
+ * @return 获取的标准化农历日期
+ */
+ public String getNormalizedDate(final String format) {
+ if (gyear >= LunarInfo.BASE_YEAR && gmonthBase1 > 0 && gday > 0) {
+ return normalized(gyear, gmonthBase1, gday, format);
+ }
+ return null;
+ }
/**
* 获得节气
@@ -439,6 +466,44 @@ public class ChineseDate {
GanZhi.getGanzhiOfDay(year, month, day));
}
+ /**
+ * 获取不同格式的标准化农历日期输出
+ *
+ * @param year 公历年
+ * @param month 公历月
+ * @param day 公历日
+ * @param format 农历输出格式
+ * @return 标准化农历日期输出
+ */
+ private String normalized(final int year, final int month, final int day, final String format) {
+ //根据选择的格式返回不同标准化日期输出,默认为Mix
+ String normalizedYear = "";
+ String normalizedMonth = getChineseMonth();
+ String normalizedDay = "";
+ CharSequence dateTemplate = "农历{}年{}{}";
+ switch (format){
+ case "Mix":
+ dateTemplate = "公元"+ year +"年农历{}年{}{}";
+ case "GSS":
+ normalizedYear = GanZhi.getGanzhiOfYear(this.year);
+ normalizedDay = getChineseDay();
+ break;
+ case "XSS" :
+ normalizedYear = getChineseZodiac();
+ normalizedDay = getChineseDay();
+ break;
+ case "GSG":
+ dateTemplate = "农历{}年{}{}日";
+ normalizedYear = GanZhi.getGanzhiOfYear(this.year);
+ normalizedDay = GanZhi.getGanzhiOfDay(year, month, day);
+ break;
+ }
+ return StrUtil.format(dateTemplate,
+ normalizedYear,
+ normalizedMonth,
+ normalizedDay);
+ }
+
/**
* 通过农历年月日信息 返回公历信息 提供给构造函数
*
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/date/chinese/ChineseMonth.java b/hutool-core/src/main/java/org/dromara/hutool/core/date/chinese/ChineseMonth.java
index fce2b9eba..439cb22a5 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/date/chinese/ChineseMonth.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/date/chinese/ChineseMonth.java
@@ -20,7 +20,7 @@ package org.dromara.hutool.core.date.chinese;
*/
public class ChineseMonth {
- private static final String[] MONTH_NAME = {"一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"};
+ private static final String[] MONTH_NAME = {"正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"};
private static final String[] MONTH_NAME_TRADITIONAL = {"正", "二", "三", "四", "五", "六", "七", "八", "九", "寒", "冬", "腊"};
/**
diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/date/ChineseDateTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/date/ChineseDateTest.java
index 29b1c203f..abe1de341 100644
--- a/hutool-core/src/test/java/org/dromara/hutool/core/date/ChineseDateTest.java
+++ b/hutool-core/src/test/java/org/dromara/hutool/core/date/ChineseDateTest.java
@@ -200,4 +200,24 @@ public class ChineseDateTest {
Assertions.assertEquals(chineseDate2, chineseDate3);
Assertions.assertNotEquals(chineseDate2, chineseDate4);
}
+ @Test
+ public void getNormalizedDateTest(){
+ final Date date = DateUtil.parse("2024-4-24");
+ final Date date2 = DateUtil.parse("2024-4-30");
+
+ final ChineseDate chineseDate = new ChineseDate(date);
+ final ChineseDate chineseDate2 = new ChineseDate(date2);
+
+ Assertions.assertEquals("公元2024年农历甲辰年三月十六", chineseDate.getNormalizedDate());
+ Assertions.assertEquals("农历甲辰年三月十六", chineseDate.getNormalizedDate("GSS"));
+ Assertions.assertEquals("农历龙年三月十六", chineseDate.getNormalizedDate("XSS"));
+ Assertions.assertEquals("农历甲辰年三月戊午日", chineseDate.getNormalizedDate("GSG"));
+ Assertions.assertEquals("公元2024年农历甲辰年三月十六", chineseDate.getNormalizedDate("Mix"));
+
+ Assertions.assertEquals("公元2024年农历甲辰年三月廿二", chineseDate2.getNormalizedDate());
+ Assertions.assertEquals("农历甲辰年三月廿二", chineseDate2.getNormalizedDate("GSS"));
+ Assertions.assertEquals("农历龙年三月廿二", chineseDate2.getNormalizedDate("XSS"));
+ Assertions.assertEquals("农历甲辰年三月甲子日", chineseDate2.getNormalizedDate("GSG"));
+ Assertions.assertEquals("公元2024年农历甲辰年三月廿二", chineseDate2.getNormalizedDate("Mix"));
+ }
}