原 java利用hutool工具类ChineseDate实现公历和农历的相互转换
版权声明:本文为博主原创文章,请尊重他人的劳动成果,转载请附上原文出处链接和本声明。
本文链接:https://www.91mszl.com/zhangwuji/article/details/1411
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.12</version>
</dependency>
方法 | 描述 |
---|---|
cn.hutool.core.date.ChineseDate.getChineseYear() | 获得农历年份 |
cn.hutool.core.date.ChineseDate.getGregorianYear() | 获取公历的年 |
cn.hutool.core.date.ChineseDate.getMonth() | 获取农历的月,从1开始计数 |
cn.hutool.core.date.ChineseDate.getGregorianMonthBase1() | 获取公历的月,从1开始计数 |
cn.hutool.core.date.ChineseDate.getGregorianMonth() | 获取公历的月,从0开始计数 |
cn.hutool.core.date.ChineseDate.isLeapMonth() | 当前农历月份是否为闰月 |
cn.hutool.core.date.ChineseDate.getChineseMonth() | 获得农历月份(中文,例如二月,十二月,或者润一月) |
cn.hutool.core.date.ChineseDate.getChineseMonthName() | 获得农历月称呼(中文,例如二月,腊月,或者润正月) |
cn.hutool.core.date.ChineseDate.getDay() | 获取农历的日,从1开始计数 |
cn.hutool.core.date.ChineseDate.getGregorianDay() | 获取公历的日 |
cn.hutool.core.date.ChineseDate.getChineseDay() | 获得农历日 |
cn.hutool.core.date.ChineseDate.getGregorianDate() | 获取公历的Date |
cn.hutool.core.date.ChineseDate.getGregorianCalendar() | 获取公历的Calendar |
cn.hutool.core.date.ChineseDate.getFestivals() | 获得节日 |
cn.hutool.core.date.ChineseDate.getChineseZodiac() | 获得年份生肖 |
cn.hutool.core.date.ChineseDate.getCyclical() | 获得年的天干地支 |
cn.hutool.core.date.ChineseDate.getCyclicalYMD() | 干支纪年信息 |
cn.hutool.core.date.ChineseDate.getTerm() | 获得节气 |
cn.hutool.core.date.ChineseDate.toStringNormal() | 转换为标准的日期格式来表示农历日期,例如2020-01-13 |
cn.hutool.core.date.ChineseDate.toString() |
|
package com.fyq.utils;
import cn.hutool.core.date.ChineseDate;
import cn.hutool.core.date.DateUtil;
/**
* 功能:将日期转成阴历
* 网址:https://91mszl.com
* @Author: zxb
* @Date: 2022-04-22 19:05:04
*/
public class LunarUtils {
// 公历转农历
public static String solarToLunar(String date){
ChineseDate chineseDate=new ChineseDate(DateUtil.parseDate(date));
String lunar=chineseDate.toStringNormal();
System.out.println("获得农历年份: " + chineseDate.getChineseYear()); // 获得农历年份, 如: 2020
System.out.println("获取农历的月,从1开始计数: " + chineseDate.getMonth()); // 获取农历的月,从1开始计数
System.out.println("当前农历月份是否为闰月: " + chineseDate.isLeapMonth()); // 当前农历月份是否为闰月
System.out.println("获得农历月份(中文,例如二月,十二月,或者润一月): " + chineseDate.getChineseMonth()); // 获得农历月份(中文,例如二月,十二月,或者润一月)
System.out.println("获得农历月称呼(中文,例如二月,腊月,或者润正月): " + chineseDate.getChineseMonthName()); // 获得农历月称呼(中文,例如二月,腊月,或者润正月)
System.out.println("获取农历的日,从1开始计数: " + chineseDate.getDay()); // 获取农历的日,从1开始计数
System.out.println("获得农历日: " + chineseDate.getChineseDay()); // 获得农历日
System.out.println(chineseDate.toStringNormal()); // 转换为标准的日期格式来表示农历日期,例如2020-01-13
// -----------------------------------------------------------------------
System.out.println("获取节日: " + chineseDate.getFestivals()); // 获取节日
System.out.println("获得年份生肖: " + chineseDate.getChineseZodiac()); // 获得年份生肖
System.out.println("获得年的天干地支: " + chineseDate.getCyclical()); // 获得年的天干地支
System.out.println("干支纪年信息: " + chineseDate.getCyclicalYMD()); // 干支纪年信息
System.out.println("获得节气: " + chineseDate.getTerm()); // 获得节气
System.out.println("转换为标准的日期格式来表示农历日期: " + chineseDate.toStringNormal()); // 转换为标准的日期格式来表示农历日期,例如2020-01-13
System.out.println(chineseDate.toString());
return lunar;
}
// 农历转公历[isLeapMonth 表示是否闰月]
public static String lunarToSolar(int year, int month, int day, boolean isLeapMonth){
ChineseDate chineseDate=new ChineseDate(year, month, day, isLeapMonth);
String gregorian=chineseDate.getGregorianDate().toString();
System.out.println(gregorian);
System.out.println("获取公历的年份: " + chineseDate.getGregorianYear()); // 获取公历的年份
System.out.println("获取公历的月,从1开始计数: " + chineseDate.getGregorianMonthBase1()); // 获取公历的月,从1开始计数
System.out.println("获取公历的月,从0开始计数: " + chineseDate.getGregorianMonth()); // 获取公历的月,从0开始计数
System.out.println("获取公历的日: " + chineseDate.getGregorianDay()); // 获取公历的日
System.out.println("获取公历的Date: " + chineseDate.getGregorianDate()); // 获取公历的Date
System.out.println("获取公历的Calendar: " + chineseDate.getGregorianCalendar()); // 获取公历的Calendar
System.out.println("获取节日: " + chineseDate.getFestivals()); // 获取节日
System.out.println("获得年份生肖: " + chineseDate.getChineseZodiac()); // 获得年份生肖
System.out.println("获得年的天干地支: " + chineseDate.getCyclical()); // 获得年的天干地支
System.out.println("干支纪年信息: " + chineseDate.getCyclicalYMD()); // 干支纪年信息
System.out.println("获得节气: " + chineseDate.getTerm()); // 获得节气
System.out.println("转换为标准的日期格式来表示农历日期: " + chineseDate.toString()); // 转换为标准的日期格式来表示农历日期,例如2020-01-13
System.out.println(chineseDate.toString());
return gregorian;
}
public static void main(String[] args) {
// String solarDate=solarToLunar("2022-08-09");
String lunarDate=lunarToSolar(2023, 8, 23, false);
}
}
获得农历年份: 2022
获取农历的月,从1开始计数: 7
当前农历月份是否为闰月: false
获得农历月份(中文,例如二月,十二月,或者润一月): 七月
获得农历月称呼(中文,例如二月,腊月,或者润正月): 七月
获取农历的日,从1开始计数: 12
获得农历日: 十二
2022-07-12
获取节日:
获得年份生肖: 虎
获得年的天干地支: 壬寅
干支纪年信息: 壬寅年戊申月甲午日
获得节气:
转换为标准的日期格式来表示农历日期: 壬寅虎年 七月十二
壬寅虎年 七月十二
2022-07-12
3.2)农历转公历执行结果
获取公历的年份: 2023
获取公历的月,从1开始计数: 10
获取公历的月,从0开始计数: 9
获取公历的日: 7
获取公历的Date: 2023-10-07 00:00:00
获取公历的Calendar: java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2023,MONTH=9,WEEK_OF_YEAR=33,WEEK_OF_MONTH=2,DAY_OF_MONTH=7,DAY_OF_YEAR=221,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=1,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=36,ZONE_OFFSET=28800000,DST_OFFSET=0]
获取节日:
获得年份生肖: 兔
获得年的天干地支: 癸卯
干支纪年信息: 癸卯年辛酉月戊戌日
获得节气:
转换为标准的日期格式来表示农历日期: 癸卯兔年 八月廿三
癸卯兔年 八月廿三
2023-10-07 00:00:00
参考资料:
https://blog.csdn.net/shi_hong_fei_hei/article/details/117431150
2022-08-09 14:00:30 阅读(1810)
名师出品,必属精品 https://www.91mszl.com
博主信息